2013-01-20 91 views
3

涉及多個條件的SQL select查詢的時間複雜度是多少?具有多個條件的SQL select查詢的時間複雜度

SELECT * 
    FROM products 
WHERE price > 100 
    AND width > 100 
    AND rating > 100 

例如,如何做一個數據庫引擎(InnoDB的)處理該查詢與價格,寬度和等級的指標?

發動機會先處理價格,然後按寬度和等級過濾結果嗎?這意味着首先輸出0(log(n)+ k) 其中k表示結果的數量,n表示產品表中的條目數量, 然後是O(n),然後是O(n),n是結果的數量每個最後的過濾操作?

+0

太廣,沒有一個具體的數據庫(包括版本)。即使如此,它依賴於™。 –

+0

@OMGPonies +1爲商標。 – Kermit

+0

@LibertPiouPiou你不能說第一個是O(log(n))。例如,如果所有行都具有「價格> 100」,那麼它必須是O(n)。 – svick

回答

2

你基本上在問SQL優化器是如何工作的,正如指出的那樣,它在SQL版本上有所不同,具體取決於它。

通常(非常廣泛),優化器會保留關於表的元數據,以便它可以選擇哪個索引有意義。例如,如果一個表格包含學生性別和GPA,那麼您會希望優化器始終使用GPA上的索引。但是,如果您在全男性學校運行查詢並搜索女性,優化器可能會意識到首先搜索性別列會更快(因爲只有極少的記錄會被返回)。另外,如果你的表非常小,優化器可能會說,「有索引,我只是掃描整個表」。...

在你的例子中,考慮有多少不同的值。列是否都是整數?如果是這樣,優化器可以查詢元數據並說「嗯,只有300行的評級超過100,10,000行的價格超過100,我想我會用評級開始......」 。

但是,正如OMG小馬指出,這取決於...