#mysql
Вопрос:
Есть индекс со столбцом, его имя такое my_index
.
create index my_index
on table(column );
Реальные строки:
select count(*) from table as b where b.column is not null;
= 31517
Строка в пояснениях:
select count(*) from table as b where b.column is not null;
ID | select_type | стол | перегородки | Тип | возможные ключи | Клавиша | key_len | ссылка | строки | отфильтровано | Дополнительный |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | простой | b | диапазон | my_index | my_index | 99 | 24294 | 100 | Использование где; Использование индекса |
Интересно, почему строки в объяснении (24294) меньше, чем реальные строки (31517)
После АНАЛИЗА ТАБЛИЦЫ
ANALYZE TABLE Table
explain select count(*) from table as b where b.column is not null;
ID | select_type | стол | перегородки | Тип | возможные ключи | Клавиша | key_len | ссылка | строки | отфильтровано | Дополнительный |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | простой | b | диапазон | my_index | my_index | 99 | 16594 | 100 | Использование где; Использование индекса |
24294 => 16594 !!!
Комментарии:
1. Количество показанных строк в пояснении является приблизительным. Обновите статистику таблицы для более точного значения.
2. @Akina Извините, я отредактировал описание .
3. Дайте
my_index
определение.4. @Akina Я обновил описание. Это единый индекс для
column
5. Похоже, индекс используется не как индекс, а как компактная версия таблицы, и выполняется полное сканирование по этому индексу. Нужен ли этот индекс только для этого запроса, или существует множество запросов, которые выбирают по определенному списку значений или диапазону?