按键自动完成查询到300万行表

时间:2014-06-13 21:37:56

标签: php mysql sql autocomplete innodb

我有一张表fs_city,全世界有300万个城市,还有一张表fs_country

当用户访问网站时,它会检测到其国家/地区代码,用户需要从一个框中选择他们的国家/地区和城市(如果用户来自美国,则会在按键时查找fs_city中的城市)和类型" Ne",他将获得一个下拉列表,其中包含"纽约"因为我这样做是为了创建一个自动完成输入。

问题在于,查询是在每次按键时发送的,在我的示例中,#34; Ne"对表fs_city有两个查询。

此外,即使只有一个查询,从该表返回响应需要6秒......我的表有主键。

这是我的SQL查询:

SELECT 
    ci.city_id,
    ci.country_code,
    ci.city,
    ci.region,
    co.country_name
FROM 
    fs_city as ci,
    fs_country as co
WHERE
    ci.city LIKE "Ne%"
    AND co.country = ci.country_code
    AND ci.country_code = :country
ORDER BY 
    ci.city ASC 
    LIMIT 0,20

如何创建自动完成功能(使用按键),以及如何加快fs_city表查询?

已更新:

fs_city主键:city_id

fs_country主键:country_id

引擎:InnoDB

1 个答案:

答案 0 :(得分:1)

jQuery有一个很好的小部件,正是你正在寻找的东西,我很确定你可以限制它只在一定数量的字符后开始查询数据库,这样你就可以限制你的结果了。这应该可以解决你的速度问题并缩短你的javascript。 http://jqueryui.com/autocomplete/

编辑 MySQL还有一个LIMIT术语来限制回报,这也可能有所帮助。