php - 按键自动完成对 300 万行表的查询

标签 php mysql sql autocomplete innodb

我有一个表 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/

相关文章:

php - 在 SQL 中是否可以将连字符和空格视为相同?

mysql - 2个整数字段之间的差异

javascript - 使用 Webstorm 服务器提供 PHP 服务

java - SQL 将列的每个值与另一个表中行的所有值进行比较

sql - Oracle SQL - 如何编写有条件和循环的插入语句?

mysql - 以三个字母和四个数字开头的正则表达式

java - 将 SQL 对象添加到 JTable

php - 富媒体文件的全文搜索

php - Facebook 应用程序成功发布到页面,但非开发人员看不到帖子。我真的必须审查只有 1 个用户的应用程序吗?

php - 我如何比较两个数组并将唯一记录添加到表中