2015-11-09 104 views
2

我讀的MySQL document有關指數,但我不明白這樣的說法:我感到困惑的B樹索引

不跨越WHERE子句中的所有AND級的任何指標不 用過優化查詢。換句話說,爲了能夠使用索引,必須在每個AND組中使用索引的前綴。

這是什麼意思?例如,我有一個表A,它有一個索引(index_part1,index_part2,index_part3)。

我已經閱讀了這個例子下面的聲明,但我仍然感到困惑。

回答

2

這基本上意味着索引可以用於where條款,其中條件通過AND而不是OR連接。因此,在a, b和索引用於:

where a = 10 and b = 100 

但是,它不能,如果你有or更換and使用。

「範圍」的概念本質上是指共同的小節。因此,MySQL可能足夠聰明地使用索引:

where (a = 10 and b = 100 and c = 'a') or 
     (a = 10 and b = 100 and c = 'b') 

該索引的工作原理是因爲它們有一個共同的子條款。

但該指數不能用於:

where (a = 10 and b = 100 and c = 'a') or 
     (a = 10 and c = 'b') or 
     (b = 100 and c = 'c') 

有列的,這也是該指數條款沒有共同集。

+0

謝謝,如果索引是(a,b),並且我使用where(a = 10 and b = 100 and c ='a')or(a = 10 and c = 10),它是否使用a索引?如果我使用where(b = 100和c ='a')或(b = 10和c = 10)是否使用b索引? –

+0

@王一冉。 。 。是和不是。要使用索引'(a,b)',你需要在比較中使用'a'。 –