Middle+
41
questionbank

Когда полное сканирование набора данных бывает более эффективным, чем доступ по индексу?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Когда процент записей, которые необходимо обработать, достаточно высокий (например, более 10-20%), чтобы издержки на поиск по индексу и чтение отдельных блоков данных превзошли преимущества.

Другие случаи:

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

Пример, когда полное сканирование может быть эффективнее:

sql