Задать вопрос

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

Есть столбец где значения только да или нет могут быть, выборка по нему долгая. Составной индекс делал на 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
  • Вопрос задан
  • 573 просмотра
Подписаться 2 Оценить 7 комментариев
Помогут разобраться в теме Все курсы
  • Skillbox
    Java-разработчик
    8 месяцев
    Далее
  • Shultais Education
    Основы SQL
    3 месяца
    Далее
  • OTUS
    PHP Developer. Professional
    5 месяцев
    Далее
Решения вопроса 1
begemot_sun
@begemot_sun
Программист в душе.
> LIMIT 100000,800
у вас сам по себе тяжелый запрос, и это похоже на пагинацию.
Каждый раз когда вам нужно получить элементы начиная с №, mysql вынужден искать все № элементы.
Если индекс не используется, вы можете "заставить" mysql его использовать.

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

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

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

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