Прежде всего, кластеризованный индекс не гарантирует, что строки физически хранятся в порядке индекса. Например, InnoDB может хранить кластеризованный индекс непоследовательным образом. То есть две страницы базы данных, содержащие последовательные строки таблицы, могут храниться физически близко друг к другу или далеко друг от друга в табличном пространстве и в любом порядке. Структура данных B-дерева для кластеризованного индекса имеет указатели на конечные страницы, но их не нужно хранить в любом порядке.
SSD полезен для ускорения операций на основе ввода-вывода, особенно при поиске дисков. Это намного быстрее, чем вращающийся магнитный диск. Но оперативная память по-прежнему на пару порядков быстрее, чем у лучшего SSD.
Номера 2018 года :
- Поиск диска: 3 000 000 нс
- Случайное чтение SSD: 16 000 нс
- Ссылка на основную память: 100 нс
ОЗУ по-прежнему превосходит длительное хранение с большим отрывом. Если ваш набор данных (или, по крайней мере, активный поднабор вашего набора данных) помещается в ОЗУ, вам не нужно беспокоиться о разнице между хранилищем на магнитном диске и накопителем SSD.
Ваш комментарий:
Кластерный индекс помогает, потому что, когда поиск первичного ключа просматривает B-дерево и находит листовой узел, сразу же появляются все остальные поля строки, связанные с этим значением первичного ключа.
Сравните с MyISAM, где индекс первичного ключа отделен от строк таблицы. Запрос выполняет поиск в B-дереве индекса первичного ключа и на конечном узле находит указатель на местоположение в файле данных, где хранится соответствующая строка. Поэтому он должен выполнить второй поиск в файле данных.
Это не обязательно означает, что кластерный индекс в InnoDB хранится последовательно. Возможно, потребуется немного пропустить, чтобы прочитать все страницы табличного пространства. Вот почему так полезно иметь страницы в оперативной памяти в пуле буферов.