索引仅影响WHERE子句?

acm*_*acm 3 sql postgresql indexing

如果我有类似的东西:

CREATE INDEX   idx_myTable_field_x
ON             myTable
USING          btree (field_x);

SELECT COUNT(field_x), field_x FROM myTable GROUP BY field_x ORDER BY field_x;
Run Code Online (Sandbox Code Playgroud)

想象一下myTable,周围500,000 rows和大多数field_x价值观是独一无二的.

由于我不使用任何WHERE子句,创建的索引在我的查询中是否会有任何影响?

编辑:我问这个问题,因为我在创建索引之前和之后的查询时间之间没有任何相关的区别; 它们总是花费大约8秒钟(当然这是太多时间!).这种行为有望吗?

a_h*_*ame 6

索引在这里没有帮助,因为你正在阅读整个表,无论如何首先去索引是没有用的(PostgreSQL还没有索引扫描)

因为索引中几乎所有的值都是唯一的,所以无论如何它都不会对这种情况有所帮助.索引查找(包括其他DBMS的索引扫描)往往对查找少量行非常有用.

索引可能会用于订购,但我对此表示怀疑.

如果查看输出,EXPLAIN ANALYZE VERBOSE可以看到排序是在内存中完成还是(由于结果的大小)在磁盘上完成.

如果在磁盘上完成排序,则可以通过增加work_mem来加速查询 - 全局或仅针对您的会话.