【发布时间】:2010-12-10 21:13:34
【问题描述】:
在这里得到这个查询:
EXPLAIN
SELECT persons.id AS id, ppm.first
FROM myschema.persons
INNER JOIN myotherschema.ppm ON persons.key = ppm.pid
WHERE persons.id = 279759;
ppm.pid 列是索引中的主键 AND:
CREATE INDEX ppm_pkey_index
ON myotherschema.ppm
USING btree
(pid);
所以这里是解释:
Hash Join (cost=8.31..3105.40 rows=306 width=23)
Hash Cond: (textin(int4out(ppm.pid)) = persons.key)
-> Seq Scan on ppm (cost=0.00..2711.33 rows=61233 width=23)
-> Hash (cost=8.29..8.29 rows=1 width=12)
-> Index Scan using pskey on persons (cost=0.00..8.29 rows=1 width=12)
Index Cond: (id = 279759)
它似乎根本没有使用ppm_pkey_index:它似乎仍在扫描 61,233 行。为什么是这样?我误读了吗?推论:主键不是在 postgresql 中自动索引的吗?那么我的索引是多余的吗?
【问题讨论】:
-
除非你的名字是 Ricky Riccardo,否则你应该避免使用“'splain”这个词。 (天哪,我老了。)
-
我不需要向你们这样的人解释为什么 'splain 这么棒。
标签: sql postgresql sql-execution-plan