Запрос к базе данных по неплотному индексу

#database #indexing

#База данных #индексирование

Вопрос:

У меня проблемы с пониманием того, что задает этот вопрос:

Учитывая неплотный индекс по атрибуту SALARY таблицы EMPLOYEE , возможно ли ответить на запрос

 SELECT COUNT(*) FROM EMPLOYEE WHERE SALARY < 10,000
  

без выполнения линейного сканирования файла? Если нет, то как вы можете пересмотреть неплотный индекс, чтобы обеспечить более эффективный процесс?

Я понимаю, что ищет запрос, но я действительно не понимаю, каковы свойства неплотного индекса, которые относятся к выполнению запросов. Поскольку существуют значения для заработной платы, которые необязательно будут иметь сотрудники, то это означает, что индекс неплотный?

Если это так, я не понимаю, как мне разрешено изменять индекс, чтобы сделать запрос более эффективным.

Ответ №1:

Неплотный индекс имеет:

  • По одной записи для каждого блока
  • По одной записи для каждого отдельного значения

Плотный индекс имеет:

  • Одна запись в индексе для каждой записи

Неплотный индекс заработной платы содержит запись для каждого отдельного значения заработной платы, но не для каждой записи. Таким образом, индекс не содержит достаточной информации для выполнения ПОДСЧЕТА (*) без возврата к линейному сканированию файла данных.

Если индекс по зарплате был плотным, то вы могли бы выполнить

 SELECT COUNT(*) FROM EMPLOYEE WHERE SALARY < 10,000
  

без линейного сканирования файла.