[英]Join takes too long
我有這個查詢,大約需要5分鍾才能在Oracle中運行:
select t1.A,t2.B,t2.C,t2.D,t2.E
from TABLE1 t1 join TABLE2 t2
on t2.X = t1.Y
where t1.F = <integer>
and t2.G = <integer>
and t1.H = <integer>
t1有170萬行,t2有3100萬行。 我在t2.X和t1.F上有索引。 嘗試在t1.Y,t2.G和t1.H上添加索引,但它們沒有幫助。 有什么想法可以改善此聯接的性能嗎?
查看所有涉及的字段,每個表的覆蓋索引將涉及可能的列
t1: Y, F, H, A
t2: X, G, C, D, E
t2.X,t2.G或t1.Y,t1.F,t1.H中的任何准則的選擇性如何?
如果沒有一個單獨的列具有足夠的選擇性(理想情況下為0.5%或更少),則可能要創建一個或多個涉及多個列的覆蓋索引,例如
t2 (G, X)
t1 (H, F, Y)
注意:索引中列的順序非常重要-始終將最具有選擇性的列(將列數據划分為最不同的集合的列)放在第一位。
您可以通過在索引本身中提供所有必要的列來使索引覆蓋查詢,而以存儲為代價。 這意味着查詢根本不需要返回表數據。
create index ix_t2 on t2 (G,X) INCLUDE (C,D,E)
create index ix_t1 on t1 (H,F,Y) INCLUDE (A)
好像我在其中插入了SQL Server DDL。 在Oracle中,您必須將索引擴展為t2(G,X,C,D,E)-但這會增加索引使用的選擇性要求,因為索引鍵變得很長。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.