Что делать с индексами с низкой селективностью?

Есть столбец где значения только да или нет могут быть, выборка по нему долгая. Составной индекс делал на 2 поля EXPLAIN показывает что индекс не используется и даже possible_keys NULL он не хочет признавать его даже как возможный индекс.
1. Что делать в этом случае?
2. Что делать в случае если таких столбцов где возможно значение только 0 или 1 в БД много?

Структура таблицы:
mydate тип date по-умолчанию NULL
members int(10)

Запрос:
SELECT `members`, `domain` 
FROM `table` WHERE `mydate` IS NULL ORDER BY `members` DESC LIMIT 100000,800
  • Вопрос задан
  • 570 просмотров
Решения вопроса 1
begemot_sun
@begemot_sun
Программист в душе.
> LIMIT 100000,800
у вас сам по себе тяжелый запрос, и это похоже на пагинацию.
Каждый раз когда вам нужно получить элементы начиная с №, mysql вынужден искать все № элементы.
Если индекс не используется, вы можете "заставить" mysql его использовать.

Ну а в целом, если это какой-то интерфейс, то наверно нужно подумать зачем юзеру элементы начиная с 100к. Физически он не может просмотреть такое кол-во элементов.

Сделайте составно индекс: mydate - members. У вас 50-процентный фулл скан таблицы :)
И да, members-mydate это уже другой индекс, поэтому мог не использоваться.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы