Postgres不使用带有"ORDER BY"的索引

Moh*_*mir 7 postgresql indexing sql-order-by limit

  • 我有一张很大的桌子.
  • 我在列col1上有一个索引.
  • 我想获得col1排序的数据.
  • 从查询计划我可以说它不使用索引.
  • 当我添加"LIMIT"时,它开始使用索引
  • 对于"LIMIT"的大值,它将停止使用索引.

任何线索?

PS我想通过col1(不一定排序)的值来获得聚集的数据,除了"ORDER BY"之外的任何建议.

谢谢 !!

a_h*_*ame 6

如果从表中返回所有行,则索引扫描将比表扫描慢.为什么你认为你需要使用索引?

你可能会尝试使用

set enable_seqscan = false

为了禁用顺序扫描,但我确信它会比顺序扫描慢.

ORDER BY是对数据进行排序的唯一方法.您可能会看到的任何其他排序都是纯粹的巧合

编辑
要清除:我建议关闭seq扫描.我刚发布这个作为一种方式来表明seq扫描确实比索引扫描更快.一旦关闭,使用索引扫描的执行计划很可能比显示OP的seq扫描更慢,因为不需要索引扫描.

  • 然后添加"ORDER BY the_key_column"子句.这是*唯一*可靠的数据排序方式 (3认同)