We are currently running an ajax auto complete script through mySQL, as such:
<?php
$q = strtolower($_GET['term']);
if (!$q) return;
$q = noescape($q);
if (is_numeric($q)){
$q = mysql_query("SELECT * FROM `blah` WHERE `id` LIKE '" . $q . "%' DESC LIMIT 10");
}else{
$q = mysql_query("SELECT * FROM `blah` WHERE `name` LIKE '" . $q . "%' DESC LIMIT 10");
}
$json = array();
while ($r = mysql_fetch_array($q)){
$json[] = array(
"v" => $r['v'],
"p" => $r['p'],
"s" => $r['s'],
"l" => $r['v'] . ', ' . $r['s'] . ' (' . $r['p'] . ')'
);
}
echo json_encode($json);
?>
We are looking to make our search faster, so it doesn’t need to do a call to the database and slow things down.
I was looking at someone elses auto complete, and when doing the search – their ajax was making a call to a “search.ds?query=blah” file – what is this? how can we emulate something this fast?
When downloading the .ds file it prompted, we opened it and all it contained was an array of what matched our search, so they aren’t storing ALL of the data in there.
Thank you
If you want to make your autocomplete faster you could do some things:
1) consider if you need a database query (the answer is no if you never or rarely need to change the data for the autocomplete, yes if the data is dynamic like a list of your friends)
2) put covering indexes on the tables/columns you are doing the search on
3) cache your results in the browser to avoid making too much calls
4) NEVER do a select * query!!!You waste a lot of time retrieving data you probably don’t use!Just select the field you need!
5) when you do a lookup against an id don’t use LIKE as you do: use = it’s much faster