我有三張桌子table_a,,,,table_b。table_c它們都有要點索引。我想在table_c和 的 UNIONtable_a之間執行左連接table_b。可以將 UNION 視為“索引”嗎?我認為創建新表作為 UNION 會更好,但是這些表很大,所以我盡量避免這種冗余。
就 SQL 而言,我的問題是:
這是
SELECT * FROM myschema.table_c AS a
LEFT JOIN
(SELECT col_1,col_2,the_geom FROM myschema.table_a
UNION
SELECT col_1,col_2,the_geom FROM myschema.table_b) AS b
ON ST_Intersects(a.the_geom,b.the_geom);
等于這個?
CREATE TABLE myschema.table_d AS
SELECT col_1,col_2,the_geom FROM myschema.table_a
UNION
SELECT col_1,col_2,the_geom FROM myschema.table_b;
CREATE INDEX idx_table_d_the_geom
ON myschema.table_d USING gist
(the_geom)
TABLESPACE mydb;
SELECT * FROM myschema.table_c AS a
LEFT JOIN myschema.table_d AS b
ON ST_Intersects(a.the_geom,b.the_geom);
uj5u.com熱心網友回復:
您可以使用 來查看執行計劃EXPLAIN,但我懷疑它是否會使用索引。
與其在一張表和其他三張表的并集之間執行左連接,不如在一張表和三張表中的每張表之間依次執行左連接的并集。這將是一個更長的陳述句,但如果可以加快左連接,PostgreSQL 肯定會使用索引。
一定要使用UNION ALL而不是UNION除非你真的必須洗掉重復項。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/432604.html
標籤:PostgreSQL 索引 postgresql-9.3
上一篇:如何為原始型別(int,real...)多載相等運算子?
下一篇:獲取回圈內當前列的型別
