我在postgres数据库中有一个book表,它有一个user_id列。如果没有索引,则使用某个user_id查询所有图书需要0.607 ms
lesson4=# select * from books where user_id = 5;
Time: 0.607 ms
然后我创建了一个这样的索引
lesson4=# create index user_idx on books (user_id);
CREATE INDEX
Time: 43.288 ms
然后我运行了相同的查询,花费的时间超过了两倍
lesson4=# select * from books where user_id = 5;
Time: 1.397 ms
注意,数据库中只有几行。不确定是否会产生影响。
我是否正确创建了索引?为什么它现在变慢了?
答案 0 :(得分:1)
您的查询速度有点慢三倍。以下是假设:
规划器确定索引可能会有所帮助,因此它会进行索引扫描。这需要通过索引进行树搜索,然后通过相关页面进行顺序扫描。
如果没有索引,您可以对十个页面进行顺序扫描,找到答案。不仅第二个更快,更简单。
这就是为什么在PostgreSQL上,索引不是性能问题的神奇答案。通常值得注意的是,在考虑添加索引之前,性能正在接近危险区域。