dongtiao0657 2011-07-12 08:29
浏览 29
已采纳

Ajax自动完成 - 如何让它更快?

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

  • 写回答

3条回答 默认 最新

  • duancuan7057 2011-07-12 08:41
    关注

    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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?