2015-01-04 5 views
1

У меня есть вопрос об этом запросе и индексацииMySQL не осуществление

мой запрос:

EXPLAIN SELECT * FROM s1_training where amt > 0 LIMIT 500 

и я индексироваться (АМТ) Но его не осуществляется, если у меня есть этот Wheres:

WHERE amt != 0 
WHERE amt > 0 
WHERE amt < 0 

результат:

id select_type  table type possible_keys key  key_len  ref  rows Extra 
1 SIMPLE s1_training  ALL  amt  NULL NULL NULL 64 Using where 

будет использоваться только индекс способ установить

WHERE amt = number (like amt = 2) 

и результат будет

id select_type  table type possible_keys key  key_len  ref  rows Extra 
1 SIMPLE s1_training  ref  amt  amt  4 const 1 

заранее спасибо за любую помощь

наилучшими пожеланиями.

+0

Второй запрос, точно такой же, как первый, кроме amt = 2? – Mihai

+0

@mihai да, это то же самое –

ответ

1

Это зависит от количества строк и мощности значений.

Например, если большинство значений >0, то оптимизатор mysql будет решать сканирование таблицы с тех пор, как быстрее. Для второго условия WHERE amt=2 это, вероятно, вернет гораздо меньше значений, поэтому индекс используется, потому что быстрее.

+0

, так что если у меня есть 100 тыс. Строк, это снова сканирует таблицу? что, если у меня есть 40k строк? –

+0

@Benjaminfox Это зависит от процента строк из общей суммы, на которую распространяются ваши условия. – Mihai

+1

очень полезные данные спасибо Михай –

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