如何解决为什么postgres不使用外键索引?
为什么postgres拒绝使用外键?这是我的查询,联接位于外键上。
EXPLAIN
SELECT *
FROM listings_searchresult
JOIN listings_searchquery ON listings_searchresult.search_query_id = listings_searchquery.id
Hash Cond: (listings_searchresult.search_query_id = listings_searchquery.id)
-> Seq Scan on listings_searchresult (cost=0.00..4898345.08 rows=83607008 width=1129)
-> Hash (cost=570499.88..570499.88 rows=20226788 width=109)
-> Seq Scan on listings_searchquery (cost=0.00..570499.88 rows=20226788 width=109)
为什么postgres不使用外键?我将其删除并读取,以防它损坏但仍无法正常工作。我可以以某种方式强迫postgres使用它吗?
解决方法
除非其中一个表很小,否则读取整个表是处理此类查询的最有效方法。
使用您设想的嵌套循环联接,PostgreSQL将必须扫描listings_searchresult
上的索引2000万次。
PostgreSQL通过使用哈希联接来在较小的表中构建一个哈希表,并针对较大的表中的每一行探测该哈希表,这样会更好。
在没有附加WHERE
条件的情况下联接两个大表总是很慢,并且可能会产生很大的结果集。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。