【问题标题】:Why is this sphinx query so slow? ORDER BY id DESC为什么这个 sphinx 查询这么慢? ORDER BY id DESC
【发布时间】:2020-11-28 01:51:00
【问题描述】:
SELECT id FROM postalcodes ORDER BY id DESC LIMIT $x, 1

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

查询时间:0.17 秒

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

【问题讨论】:

  • 可以添加索引让查询更快
  • 不,听起来 Avinash 是在谈论 MySQL。无法在 sphinx 中添加索引!

标签: mysql search-engine sphinx performance-testing


【解决方案1】:

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

正如 cmets 中所述,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;

虽然如果你最终在 where 中添加了一个 'MATCH',那么你最终不会尊重隐式排序,所以如果没有 ORDER BY,查询将无法工作,在这种情况下,reverse_scan 将无济于事。

【讨论】:

  • 感谢 barryhunter,狮身人面像之王! :)
猜你喜欢
  • 1970-01-01
  • 2011-03-11
  • 2020-03-19
  • 2014-03-12
  • 2011-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多