2015-05-10 195 views
0

我一直試圖找出這個答案,現在幾個答案,但似乎無法包圍我的頭。任何人都可以向我解釋這些答案是如何計算的?我知道:A = 1000,B = 20,C = 10,D = 10,E = 1。我知道當沒有索引時,我們必須搜索50 X 20,因爲我們需要遍歷所有的sensorID 50)和所有時間(每個20)。然後,當我們將索引放在sensorID上時,我們只需要搜索時間。當我們把時間索引放到10的時候,我主要會迷失方向,它會降低到10.不是50嗎?數據庫索引混淆

enter image description here

+0

閱讀:http://use-the-index-luke.com/它將幫助你理解這個非常重要的SQL角落。 –

回答

0

當我們把時間索引我主要是迷路並將其放到它下降到10.如果不是50?

閱讀問題再仔細:

...恰好有每一個獨特的時間讀數...

這意味着,在1個索引查找操作(在問題中你不需要考慮)數據庫引擎必須遍歷10行(元組),應用sensorID上的過濾器來查找目標記錄。

+0

那麼爲什麼當我們做沒有索引的原始查詢時,這10個元組會被忽略?我們只使用50 * 20。我們不應該使用50 * 20 * 10嗎? – Fantikz

+0

時間列上的索引具有葉節點指向具有相同時間值的唯一行的指針(PK值)。因此,數據庫引擎只需要通過這十行來找到它所需的一行。爲了更好地理解索引通常使用的btree結構。 – peterm

0

在「WHERE」子句中,「column = constant」和「and'd」有兩個子句。 「最佳」INDEX是兩列的綜合指數。那就是INDEX(sensorID, time)。這兩列的順序與您提交的查詢無關,但如果您有WHERE sensorID=123 AND time BETWEEN ...,那麼該順序肯定更好。進一步討論在my index cookbook

「探測器」的數量是一個(爲給定的sensorID和時間(或開始時間)查找第一個索引項),再加上它將線性掃描INDEX以找到具有相同sensorID的更多行ID 和在給定範圍內的時間。因此,它是最佳的。

(我會感興趣如果你多出了「盧克」鏈接,或者我的鏈接的聽到)