添加索引后查询速度较慢

时间:2014-08-19 02:10:38

标签: postgresql

我在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

注意,数据库中只有几行。不确定是否会产生影响。

我是否正确创建了索引?为什么它现在变慢了?

1 个答案:

答案 0 :(得分:1)

您的查询速度有点慢三倍。以下是假设:

  1. 该表长约10页
  2. 表和索引都适合RAM
  3. 你从不同的页面中提取了一些记录,但远不到表格的10%。
  4. 规划器确定索引可能会有所帮助,因此它会进行索引扫描。这需要通过索引进行树搜索,然后通过相关页面进行顺序扫描。

    如果没有索引,您可以对十个页面进行顺序扫描,找到答案。不仅第二个更快,更简单。

    这就是为什么在PostgreSQL上,索引不是性能问题的神奇答案。通常值得注意的是,在考虑添加索引之前,性能正在接近危险区域。