Глава 10. Повышение производительности
индексе нужного ключа производится обращение к соответствующей странице таб-
лицы и извлечение искомой строки по ее идентификатору. При этом нужно учиты-
вать, что хотя записи в индексе упорядочены, но обращения к страницам таблицы
происходят хаотически, поскольку строки в таблицах не упорядочены. В таком случае
при низкой селективности выборки, т. е. когда из таблицы отбирается значительное
число строк, использование индексного поиска может не только не давать ускорения
работы, но даже и снижать производительность.
Просмотр исключительно на основе индекса
(index only scan), как следует из на-
звания метода, не должен, казалось бы, требовать обращения к строкам таблицы,
поскольку все данные, которые нужно получить с помощью запроса, в этом случае
присутствуют в индексе. Однако в индексе нет информации о видимости строк тран-
закциям — нельзя быть уверенным, что данные, полученные из индекса, видны те-
кущей транзакции.
Поэтому сначала выполняется обращение к карте видимости (visibility map), которая
существует для каждой таблицы. В ней одним битом отмечены страницы, на кото-
рых содержатся только те версии строк, которые видны всем без исключения тран-
закциям. Если полученная из индекса версия строки находится на такой странице,
значит, эта строка видна текущей транзакции и обращаться к самой таблице не тре-
буется. Поскольку размер карты видимости очень мал, то в результате сокращается
объем операций ввода/вывода. Если же строка находится на странице, не отмеченной
в карте видимости, тогда происходит обращение и к таблице; в результате никакого
выигрыша по быстродействию в сравнении с обычным индексным поиском не до-
стигается. Просмотр исключительно на основе индекса особенно эффективен, когда
выбираемые данные изменяются редко. Он может применяться, когда в предложе-
нии SELECT указаны только имена столбцов, по которым создан индекс.
Достарыңызбен бөлісу: |