gpt4 book ai didi

sql - 'splain a postgresql EXPLAIN to me

转载 作者:行者123 更新时间:2023-11-29 12:14:50 25 4
gpt4 key购买 nike

在这里查询:

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 列是索引中的主键:

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 中自动索引的吗?那么我的索引是多余的吗?

最佳答案

主键在您的键上创建UNIQUE INDEXES。所以你的索引确实是多余的。

创建索引后,您是否在表上运行了vacuum analyze

sql> vacuum analyze myotherschema.ppm;

我现在看到另一个问题:ppm.pidpersons.key 是同一个字段类型吗?由于不必要的数据转换,您可能会遇到性能问题,并且无法使用索引,因为您没有为连接时需要使用的转换函数建立索引...

关于sql - 'splain a postgresql EXPLAIN to me,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4413374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com