Должен ли я использовать индекс при использовании где предложение в MySQL? - PullRequest
1 голос
/ 26 сентября 2011

У меня есть таблица, в которой хранится около 50 тыс. Строк, и вот мой запрос:

select * from video where status = 1 and filter = 1 and category = 4

эти столбцы - tinyint, и мне интересно, нужно ли мне индексировать эти столбцы?

Ответы [ 3 ]

3 голосов
/ 26 сентября 2011

Если вы создаете индекс для этого запроса, попробуйте (status, filter, category) (порядок может быть другим).

Но это зависит от того, какой процент строк вашей таблицы имеет (status, filter, category) = (1,1,4). Чем меньше процент, тем лучше ваш запрос будет выполняться с использованием индекса. Как отметил santiagobasulto, если селективность индекса не высока, индекс все равно не будет использоваться для запроса, но будет выполнена полная проверка таблицы.

2 голосов
/ 26 сентября 2011

Нет!

Вы всегда должны учитывать селективность индекса!Если результат предложения where в индексе вернет более 20% таблицы, тогда индекс НЕ используется, но поддерживается.

Так, например, статус вашего видео будет 1, 2, 3, тогда у вас есть 3 возможных состояния.Если эти индексы хорошо распределены, мы можем предположить, что примерно 33,3% из них будут приблизительно.Тогда запрос:

select * from video where status = 1

НЕ будет использовать этот индекс!Вместо этого будет использоваться ПОЛНЫЙ СКАНИРОВАНИЕ.

Пожалуйста, прочитайте об этом.Это действительно важно и распространенная ошибка.

Поиск в Google

0 голосов
/ 26 сентября 2011

Я бы определенно использовал индексы.Они делают выбор быстрее.Но тогда, если в таблицу будет много вставок, я бы снова подумал.Индексы в операторах вставки добавляют много перегрузки, и ваша инструкция вставки будет медленной, поскольку она должна реструктурировать индексы каждый раз, когда вы делаете вставку.

...