5.4.1 Конструктивные особенности MySQL
В MySQL данные и индексы хранятся отдельно, в разных файлах, в то время
как во многих (практически во всех) базах данных данные и индексы
помещаются вместе в одном и том же файле. Мы полагаем, что конструкция
MySQL лучше подходит для очень широкого диапазона современных систем.
Существует еще один способ хранения исходных данных - когда данные для
каждого столбца содержатся в отдельной области (примерами являются SDBM и
Focus). При такой организации данных неизбежно снижение производительности
для каждого запроса, затрагивающего более, чем один столбец. Поскольку при
доступе к более чем одному столбцу ситуация очень быстро начинает
ухудшаться, то мы полагаем, что эта модель не вполне годится для баз
данных общего назначения.
Модель, когда индексы и данные хранятся вместе (как в Oracle/Sybase и
других), встречается чаще. В этом случае запись будет находиться в
странице соответствующего индекса. Преимущества такой схемы во многих
случаях заключаются в том, что считывание с диска получается более
экономным - в зависимости от того, насколько хорошо кэшируется индекс.
Недостатки же здесь следующие:
-
Сканирование таблиц выполняется намного медленнее, поскольку
необходимо прочитать индексы, чтобы добраться до данных.
-
Нельзя использовать только таблицу индексов для извлечения данных по
запросу.
-
Теряется много дискового пространства, поскольку необходимо
дублировать индексы из узлов (так как нельзя хранить строку в узлах)
-
Удаления со временем приводят к вырождению таблицы (так как индексы в
узлах обычно не обновляются при операции удаления).
-
Более сложно выполняется кэширование только данных об индексах.