2014-06-17 20 views
1

索引嵌套循環連接:爲什麼索引嵌套循環連接僅適用於等連接或自然連接?

對於外關係R的每個元組TR,使用索引來查找S中的滿足連接條件與元組TR

一些材料提到,「索引嵌套元組-loop加入」僅適用於適用相等連接或自然連接和索引可以在內部關係的連接屬性

SELECT * 
FROM tableA as a 
JOIN tableB as b 
ON a.col1 > b.col1; 

假設我們有b.col1的索引。

爲什麼Indexed Nested-Loop Join不適用於這種情況?

+0

你在問什麼?什麼是索引嵌套循環加入?如果這涉及查詢計劃,那麼您應該指定您正在使用的RDBMS。關於RDBMS引擎如何執行查詢沒有SQL標準。 – Frazz

+0

@Frazz我已更新我的問題。謝謝。 – camino

+0

你似乎沒有得到的是你不能決定如何執行查詢。你可以創建索引和其他東西......但是它是RDBMS引擎,它決定哪一個是獲得你要求的結果集的最好方法。你的SELECT語句告訴引擎你想要什麼。引擎決定如何把它給你。 (有些RDBMS允許你提出一個計劃,但那是另一回事) – Frazz

回答

1

您正在引用數據庫系統概念(c)Silberschatz,Korth和Sudarshan的幻燈片。

我們希望DBMS計算一個連接。有許多特殊情況可以通過各種方式來實現。這些可能涉及是否有指標,選擇條件等

,通過這個名字那本書的呼叫工作在某些情況下的具體技術:

索引嵌套循環連接

如果索引可從內環的連接屬性,並加入 爲等連接或自然連接

答案是,因爲你的查詢不符合條件。它不是等連接(即ON或WHERE a.col1 = b.col1)或自然連接(USING(col1)或NATURAL JOIN)。至於爲什麼不符合這些條件就意味着不使用這種技術,那是因爲它不起作用和/或某種其他技術更好。你給了該技術:

對於每個元組TR外關係R,使用索引來查找s中 元組滿足連接條件與元組TR

如果它是一個不等式,你不能「查閱」索引;你有搜索的索引。不是這種方法。