Когда процент записей, которые необходимо обработать, достаточно высокий (например, более 10-20%), чтобы издержки на поиск по индексу и чтение отдельных блоков данных превзошли преимущества.
Другие случаи:
- Отсутствие подходящего индекса: Если для запроса нет индекса, покрывающего фильтрующие поля или предоставляющего доступ к данным быстрее, чем полное сканирование.
- Неравномерное распределение данных (skew): Если индексированное поле имеет низкую кардинальность и большая часть данных сосредоточена на небольшом количестве значений, сканирование может быть быстрее, чем обход большого количества листьев индекса с одинаковыми значениями.
- Маленький набор данных: Для небольших таблиц издержки на поддержание и использование индекса могут быть выше, чем выгода от его использования.
- Последовательное чтение: Полное сканирование обычно предполагает последовательное чтение с диска, что может быть быстрее, чем случайное чтение при доступе по индексу, особенно на HDD.
- Большой объем данных в строке: Если каждая строка содержит большой объем данных, чтение полного набора данных за раз может быть эффективнее, чем многократный доступ к диску для получения отдельных строк по индексу.
Пример, когда полное сканирование может быть эффективнее:
sql