有任何线索吗?
P.S。我想通过col1(不一定排序)的值来获得聚集的数据,除了“ORDER BY”之外的任何建议。
感谢!!
答案 0 :(得分:6)
如果从表中返回所有行,则索引扫描将比表扫描慢。 为什么你认为你需要使用索引?
您可以尝试使用
set enable_seqscan = false
为了禁用顺序扫描,但我确信它会比顺序扫描慢。
ORDER BY是用于对数据进行排序的唯一方法。您可能会看到的任何其他排序都是纯粹的巧合
修改强>
要清理:我不建议关闭seq扫描。我刚发布这个作为一种方式来表明seq扫描确实比索引扫描更快。一旦关闭,使用索引扫描执行计划将很可能比显示OP的seq扫描更慢,因为不需要索引扫描。
答案 1 :(得分:4)
除了a_horse_with_no_name:
的答案使用索引实际上是两个不同的操作:首先在索引中查找所需的值。在索引中是完整记录的地址,然后取消引用。对于特定查询,这两种操作都非常快。
如果您打算使用所有或大多数记录,那么收益就会消失。如果你想要所有记录并且你通过索引,则需要更长的时间,因为每个记录都有两个搜索。在没有索引的情况下运行整个表更容易,因为这需要每列一次搜索(是的,我知道,实际上它比那更少,因为读取整个块等等......我只是想保持简单)。