База данных хранит строки таблицы в физических блоках на диске. Давайте возьмем примерную базу данных компании, которая хранит информацию о клиентах.
Когда вы добавляете строку для нового клиента, база данных хранит эту информацию в одном из доступных блоков и присваивает ей значение rowId.
При поиске клиента, если база данных знает строку, она может быстро найти запись клиента и отобразить ее. Это связано с тем, что rowId указывает на физический блок, где хранится эта конкретная информация о клиенте.
Но когда мы ищем клиента, мы делаем это на основе некоторого поля, например, фамилии. Здесь индексируется индекс. Индекс - это организованная структура, которая обеспечивает быстрое сопоставление от значения поля к rowId.
Когда новая строка добавляется в таблицу, база данных отмечает строкуId и обновляет индекс с помощью сопоставления значения поля, например, фамилии rowId. Один из часто используемых индексов имеет древовидную структуру.
В отсутствие индекса база данных должна выполнять линейный поиск (полное сканирование таблицы) всех строк, чтобы найти конкретную фамилию.
Предположите, что фамилия клиента начинается с M
. Это приводит к поиску части индекса M
. В отличие от линейного поиска таблицы, это быстро сужает поле поиска до 1/26 части целого, потому что мы исключили части индекса, где фамилия начинается с любой из 25 букв.
То же самое относится к следующему этапу поиска. Предположим, что вторая буква от имени клиента - o
. Это дополнительно сужает поле до 1/26-го из последних имен, начинающихся с M
. Продолжая, в течение нескольких шагов индекс быстро сопоставляет фамилию Moore
строке row клиента.
Та же идея может быть расширена путем добавления другого поля, например, имени для индекса. Если 1 миллион клиентов, пройдя несколько шагов древовидной структуры индекса, база данных может быстро найти rowId и избежать поиска миллионов строк.
Как помогает страница в книге? Он работает по одной и той же концепции. – Lokesh