По вопросу Q1 ... Оптимизатор запросов иногда выбирает сканирование таблицы, даже если имеется "совершенно хороший" индекс. Этот компромисс основан на сложном алгоритме, но, как правило:
Если необходимо использовать более ~ 20% индекса, считается более эффективным игнорировать индекс и просто сканировать таблицу.
Причина этого заключается в следующем: использование индекса означает сканирование индекса BTree (который очень похож на таблицу) с последующим переходом к данным BTree для поиска записи. Этого движения вперед и назад можно избежать, если он просто сканирует данные. Недостатком является то, что ему нужно игнорировать до 80% строк.
Следствие: не беспокойтесь об индексировании "флагов" (0/1, T / F, M / F, Да / Нет) или столбцов с низкой мощностью (да / нет / возможно, M / F / и т. Д., День недели, ...).
С другой стороны, может быть очень полезно иметь составной индекс, начинающийся со столбца с низкой мощностью:
WHERE deleted=0 AND created_at > NOW() - INTERVAL 1 DAY
INDEX(deleted, created_at)
person
Rick James
schedule
06.02.2019