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

Почему MySQL делает несколько тысяч отдельных операций случайного доступа к диску?

Доброго времени суток, разбираюсь с индексацией в MySQL, набрел на статью, в которой не могу понять вот это предложение:

Рассмотрим еще одну часто встречающуюся неверную конфигурацию:

SELECT id, email FROM user WHERE is_active = 1

В том случае если по индексу is_active MySQL увидит несколько тысяч строк, а таблица большая, - оптимизатор будет делать fullscan, т.к. в этом случае выигрыш от последовательного чтения всей таблицы будет больше, чем необходимость делать несколько тысяч отдельных операций случайного доступа к диску.


Собственно вопрос: почему происходит "несколько тысяч отдельных операций случайного доступа к диску"?

Прошу прощения, если это очевидный вопрос, но к сожалению мои познания в MySQL скудны и я буду очень благодарен за "разжеванный" ответ.
  • Вопрос задан
  • 167 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
terrier
@terrier
Full scan можно представить себе так:
Мы просматриваем все строки таблицы в том порядке, как они лежат на диске и для каждой строки проверяем условие is_active = 1. Последовательный доступ к диску ( или к памяти, в данном случае не важно ) - это хорошо и быстро.

Доступ с использованием индекса можно представлять себе так:
У нас есть индекс, то есть некоторая дополнительная структура данных, в которой хранится значение проиндексированной колонки и ссылка на саму строку в таблице. В случае сканирования с использованием индекса мы просматриваем строки в том порядке, в котором они лежат в индексе ( то есть с точки зрения доступа к диску - в случайном ). Случайный доступ к диску - это плохо и медленно, мкей?
( это упрощение, но оно нам поможет разобраться )
Вот про это нам и пытался рассказать автор отрывка. К сожалению, формулировка у него неудачная, так как если данное значение индекса возвращает несколько тысяч строк, а таблица большая ( миллионы, например ), то вполне возможно оптимизатор выберет как раз просмотр по индексу, так как выгода от просмотра меньшего числа записей "перевесит" выгоду от последовательного сканирования. Это все зависит от настроек оптимизатора.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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