Что такое поиск закладок в Sql Server? - PullRequest
17 голосов
/ 04 мая 2009

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

Это хорошо или плохо в запросе?

Ответы [ 3 ]

29 голосов
/ 04 мая 2009

Поиск закладок - это процесс поиска фактических данных в таблице SQL на основе записи, найденной в некластеризованном индексе.

Когда вы ищете значение в некластеризованном индексе, и вашему запросу нужно больше полей, чем является частью конечного узла индекса (все поля индекса плюс все возможные столбцы INCLUDE), тогда SQL Server необходимо перейти к извлечению реальные страницы данных - это то, что называется поиском закладок.

В некоторых случаях это действительно единственный способ - только если ваш запрос потребует еще одно поле (а не целую кучу), было бы неплохо включить это поле в некластеризованное индекс. В этом случае узел конечного уровня некластеризованного индекса будет содержать все поля, необходимые для удовлетворения вашего запроса («покрывающий» индекс), и, таким образом, поиск закладок больше не потребуется.

Марк

4 голосов
/ 04 мая 2009

Это NESTED LOOP, который объединяет некластеризованный индекс с самой таблицей в указателе строки.

Бывает для таких запросов:

SELECT  col1
FROM    table
WHERE   col2 BETWEEN 1 AND 10

, если у вас есть индекс на col2.

Индекс на col2 содержит указатели на проиндексированные строки.

Таким образом, чтобы получить значение col1, движку необходимо отсканировать индекс на col2 для значений ключа от 1 до 10, а для каждого листа индекса обратитесь к таблице. сам с помощью указателя, содержащегося в листе, выяснить значение col1.

В этой статье указывается, что Bookmark Lookup является термином SQL Server 2000, который заменяется NESTED LOOP между индексом и таблицей в SQL Server 2005 и выше

2 голосов
/ 05 мая 2009

С MSDN относительно поиска закладок:

Оператор поиска закладок использует закладка (идентификатор строки или ключ кластеризации) для найдите соответствующий ряд в таблица или кластерный индекс. Аргумент столбец содержит метку закладки используется для поиска строки в таблице или кластерный индекс. Аргумент столбец также содержит название таблица или кластерный индекс, в котором ряд посмотрел вверх. Если С ПРЕДЫДУЩИМ пункт появляется в столбце Аргумент, обработчик запросов определил что оптимально использовать асинхронный предварительная выборка (чтение вперед) при поиске до закладки в таблице или кластере индекс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...