数据行很大时不使用PostgreSQL索引

时间:2015-07-24 11:00:36

标签: sql postgresql indexing

嗨,我很好奇为什么当数据行大到100时索引不起作用。

这里选择10个数据:

mydb> explain select * from data where user_id=1;
+-----------------------------------------------------------------------------------+
| QUERY PLAN                                                                        |
|-----------------------------------------------------------------------------------|
| Index Scan using ix_data_user_id on data  (cost=0.14..8.15 rows=1 width=2043) |
| Index Cond: (user_id = 1)                                                         |
+-----------------------------------------------------------------------------------+
EXPLAIN

这里选择100个数据:

mydb> explain select * from data where user_id=1;
+------------------------------------------------------------+
| QUERY PLAN                                                 |
|------------------------------------------------------------|
| Seq Scan on data  (cost=0.00..44.67 rows=1414 width=945) |
| Filter: (user_id = 1)                                      |
+------------------------------------------------------------+
EXPLAIN

当数据行为100时,索引如何工作?

1 个答案:

答案 0 :(得分:4)

100不是大量数据。考虑10,000或100,000行可观的数量。

简单地说,表中的记录存储在数据页上。数据页通常有大约8k字节(取决于数据库和设置)。索引的主要目的是减少需要读取的数据页的数量。

如果表中的所有记录都适合一页,则无需减少正在读取的页数。将读取一页。因此,该指数可能不是特别有用。