mysql - 为什么这个 sphinx 查询这么慢?按 id DESC 排序

标签 mysql search-engine sphinx performance-testing

SELECT id FROM postalcodes ORDER BY id DESC LIMIT $x, 1

$x 是一个小于 1000 的数字(由于 max_matches)并且邮政编码索引包含约 110 万行。

查询时间:0.17 秒

为什么要花这么长时间?有没有更好的方法在索引末尾查询?

最佳答案

为什么? sphinx 按原样执行该查询的唯一方法是获取所有行,对它们进行排序,然后遍历以找到所需的行。

如评论中所述,sphinx 并不像 mysql 那样真正具有索引的概念。 (理论上应该用sphinx来做全文搜索,它使用了特殊的倒排索引)


这里有一些讨论, http://sphinxsearch.com/forum/view.html?id=5683 关于可能的解决方法。

使用 reverse_scan 和可能的 cutoff 可能会对您有所帮助。

SELECT id FROM postalcodes LIMIT $x, 1 OPTION reverse_scan = 1, cutoff = 1000;

尽管如果您最终将“MATCH”添加到 where,那么您最终将不遵守隐式排序,因此如果没有 ORDER BY,查询将无法工作,在这种情况下,reverse_scan 将无济于事。

关于mysql - 为什么这个 sphinx 查询这么慢?按 id DESC 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27201272/

相关文章:

php - 1个表中的SQL连接列

search-engine - 将变量传递给 Google 自定义搜索引擎

lucene - 多索引、需求复杂的全文检索

php - 将 Sphinx 索引数据导出到 SQL

MySQL 对来自多个表的项目进行分页

php - 升级到 PHP 7.0 后,我的网站无法启动

mysql - sql Select 和 order By 详解

search - 爬虫如何确保最大覆盖率?

.net - 如何在 .net 中对大约 1000 万的大量数据组织搜索架构

php - 无法在 MySQL-PHP 中的数据库列日期时间类型中存储值