2015-11-09 2 views
2

Я читал MySQL document об индексе, но я не понимаю, это заявление:Я путаются индекс B-Tree

Любой индекс, который не охватывает все уровни и в ИНЕКЕ не использовали для оптимизации запроса. Другими словами, чтобы иметь возможность использовать индекс , префикс индекса должен использоваться в каждой группе И.

Что это значит? Например, у меня есть таблица A, и она имеет индекс (index_part1, index_part2, index_part3).

Я прочитал этот пример ниже утверждения, но я все еще смущен.

ответ

2

В основном это означает, что индекс может использоваться для условий where, где условия связаны AND, но не OR. Так, индекс на a, b и использовать для:

where a = 10 and b = 100 

Однако, она не может быть использована, если вы замените and с or.

Концепция «span» означает, по существу, общие подпункты. Таким образом, 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) и я использую где (a = 10 и b = 100 и c = 'a') или (a = 10 и c = 10), использует ли он индекс ? Если я использую где (b = 100 и c = 'a') или (b = 10 и c = 10), то он использует b-индекс? –

+0

@wangyiran. , , Да и нет. Чтобы использовать индекс '(a, b)', вам нужно «a» в сравнении. –

Смежные вопросы