2
我讀的MySQL document有關指數,但我不明白這樣的說法:我感到困惑的B樹索引
不跨越WHERE子句中的所有AND級的任何指標不 用過優化查詢。換句話說,爲了能夠使用索引,必須在每個AND組中使用索引的前綴。
這是什麼意思?例如,我有一個表A,它有一個索引(index_part1,index_part2,index_part3)。
我已經閱讀了這個例子下面的聲明,但我仍然感到困惑。
我讀的MySQL document有關指數,但我不明白這樣的說法:我感到困惑的B樹索引
不跨越WHERE子句中的所有AND級的任何指標不 用過優化查詢。換句話說,爲了能夠使用索引,必須在每個AND組中使用索引的前綴。
這是什麼意思?例如,我有一個表A,它有一個索引(index_part1,index_part2,index_part3)。
我已經閱讀了這個例子下面的聲明,但我仍然感到困惑。
這基本上意味着索引可以用於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')
有列的,這也是該指數條款沒有共同集。
謝謝,如果索引是(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索引? –
@王一冉。 。 。是和不是。要使用索引'(a,b)',你需要在比較中使用'a'。 –