Количество элементов низкое
Вы страдаете из-за проблемы, которая называется low cardinality
.
См. Википедия .
Проблема
Короче говоря, каждая база данных (я знаю о ней) откажется использовать индекс для столбца с низким количеством элементов.
Есть еще
A хорошо База данных также откажется использовать индекс, если она предположит, что много строк будет пораженовыберите (низкая мощность выбора) , даже если сам столбец имеет много различных значений (высокая мощность столбца)
Почему - сюда вставлять БД - не использовать индекс?
Вот проблема.
Если более 50% (различается для каждой базы данных) всех строк вбаза данных имеет такое же значение, БД не будет использовать индекс, потому что было бы бессмысленно использовать индекс.
Бессмысленно делать 2 чтения для большинства строк (чтение 1 для индекса, чтение 2 для таблицы), если вы можете выполнить одно чтение (для самой таблицы).
БДв любом случае приходится читать большинство строк, поэтому он просто продолжает и читает их.
Тот факт, что БД вынуждена использовать свой самый медленный механизм доступа (полное сканирование таблицы), является причиной вашей медлительности.
Решение
Увеличить количество столбцов или увеличить количество элементов выбора.
В других работах убедитесь, что вы выбрали менее 50% всех строк, иубедитесь, что SQL-сервер знает (или может догадаться) об этом.
Как БД узнает мощность столбца?
Хорошая БД хранит статистику по таблицам и столбцам при выполнении операций выбора / обновления / вставки.Таким образом, он имеет информацию, необходимую для принятия обоснованных решений.
Ускорит ли использование индекса ускорение запроса?
Нет, это замедлит его.
SO ссылки
MySQL: столбцы с низкой кардинальностью / селективностью = как индексировать?
Индексация и альтернативы для столбцов с низкой селективностью