php - 查询 200 万+行 : response times and optimization? (PHP Codeigniter)

标签 php mysql codeigniter

编辑:当我删除正在搜索的列上的索引时,响应时间从大约 2.5 秒变为大约 2.6 秒。差异不应该大得多吗?

我正在编写一个使用 jquery autosuggest 插件的小型应用程序。用户开始输入他家乡的名称,我的代码使用 AJAX 查询包含城市名称(maxmind 城市数据库)的 270 万行表。我在正在搜索的数据库列 (city_name) 上设置了一个索引。

当我运行以下查询(使用 CodeIgniter Active Record)时,CI 的基准类报告 2.1922 秒(仅针对该查询,因此这不包括 html 页面加载时间)。

SELECT * FROM cities WHERE city_name LIKE "%bang%"

当我在 phpmyadmin 中运行相同的查询时,我得到:查询耗时 0.0068 秒


当我运行时

SELECT * FROM cities WHERE city_name LIKE "%bangkok%"

CI 的基准类报告 2.1951 秒。当我在 phpmyadmin 中运行相同的查询时,我得到:Query take 2.1811 sec.

因此,尽管 CI 对这两个查询的响应时间几乎相同,但在 phpmyadmin 中运行的响应时间却大不相同。

问题

  • 显然,查询 270 万行会相对较慢,但对于这种自动建议功能,我有什么方法可以获得不错的响应时间? 2.5秒太慢了。据我所知,没有快速的方法可以在包含所有 270 万行的 PHP 数组中使用“LIKE”语法进行搜索。内存缓存会是一个选择吗?

  • 为什么在使用 CI Active Record 时响应时间差异可以忽略不计,但在 phpmyadmin 中差异如此之大?

最佳答案

通过索引您正在搜索的列,您可以获得显着的好处(至少快 100 倍)。

看看7.3.1. How MySQL Uses Indexes .

编辑

phpmyadmin 和您的基准测试工具是否在同一台机器上运行? Phpmyadmin 应该与数据库在同一台机器上运行,但基准测试工具不能。在时间测量中,基准工具可能会考虑网络时间过载(而不是 html 渲染页面)。

关于php - 查询 200 万+行 : response times and optimization? (PHP Codeigniter),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5272364/

相关文章:

php - 符号问题

MYSQL 为 WHERE 匹配行增加 'SHOWN' 行

mysql - 如何从mysql中的结果查询中删除负值?

php - Codeigniter 2.1 - 每个月计算数据库中的数据

php - 使用 jQuery 发送表单数据

php - 十进制数的排序问题

php - Beanstalkd 如何管理内存?

php - 在 codeigniter 中使用带有 Like 的 where 子句

MySQL INSERT 如果主键值之一不匹配

mysql - 获取一对多关系中的所有子记录