我有一个表 fs_city
,其中包含全局 300 万个城市,还有一个表 fs_country
。
当用户访问网站时,它会检测到其国家/地区代码,如果用户来自美国,输入“Ne”,他将得到一个带有“New York”的下拉列表,即我这样做是为了创建一个自动完成输入。
问题是,每次按键时都会发送查询,在我的示例“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
最佳答案
jQuery 有一个很好的小部件,它正是您正在寻找的东西,我很确定您可以将其限制为仅在一定数量的字符之后开始查询数据库,这样您就可以限制您的结果。这应该可以解决你的速度问题并缩短你的 JavaScript。 http://jqueryui.com/autocomplete/
编辑 MySQL 还有一个 LIMIT 术语来限制返回,这也可能有帮助。
关于php - 按键自动完成对 300 万行表的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24214131/