假设我有以下问题:
select col_1, col_2, col_3
from table
order by col_1;
我仅在col_1上有索引。
这里有效地使用索引吗?我没有where子句,但我确实有“Order By”,所以我很想知道。
编辑第2部分:让我假装我有一个包含100万行的表。
编辑以提供问题背景:
我正在读一本关于数据库管理的书,这就是它所说的:
SELECT last_name, first_name, middle_initial, empno, position
FROM employee
WHERE position IN ('MANAGER', 'DIRECTOR', 'VICE PRESIDENT')
ORDER BY last_Name;
“如果last_name列上存在索引,则查询可以使用此索引并避免排序...”
所以我开始认为如果我在我计划总是排序的列上创建索引,“排序”会更快,即使我的查询的其余部分缺少where,group by,having等等。
答案 0 :(得分:1)
为了清理这里我做了一个简单的模拟。
首先,我创建了一个空表:
CREATE TABLE so_test (
col_1 bigint,
col_2 bigint,
col_3 bigint
);
CREATE INDEX col_1 ON so_test USING btree (col_1);
并运行两个EXPLAIN
个查询:
explain select col_1, col_2, col_3
from so_test
order by col_1;
Index Scan using col_1 on so_test (cost=0.15..66.80 rows=1510 width=24)
explain select col_1, col_2, col_3
from so_test
order by col_2;
Sort (cost=104.83..108.61 rows=1510 width=24)
Sort Key: col_2
-> Seq Scan on so_test (cost=0.00..25.10 rows=1510 width=24)
因此,在col_1
上建立一个索引将完全消除执行排序操作的任何需要,并在某种程度上加快速度。
但是,为了看到添加索引的速度相当快,您应该使用LIMIT
查询。
将来你应该熟悉postgres查询器和EXPLAIN
command。这样,您可以在不同查询中获得更快,更准确的索引使用答案。