Почему поиск RID (закладки) не отображается в плане выполнения?


Я попытался изучить поиск RID (foremerly bookmark), создав таблицу кучи:

CREATE TABLE [dbo].[CustomerAddress] 
( 
[CustomerID] [int], 
[AddressID] [int], 
[ModifiedDate] [datetime] 
); 
GO 
CREATE NONCLUSTERED INDEX x 
ON dbo.CustomerAddress(CustomerID, AddressID); 

Затем я попытался выполнить следующий запрос, чтобы проверить план выполнения:

SELECT CustomerID, AddressID, ModifiedDate 
FROM dbo.CustomerAddress 
WHERE CustomerID = 29485;

Но, используя MSSM, я не могу увидеть поиск RID в плане выполнения:

Введите описание изображения здесь

Я использую SQL Server 2008R2 (версия 10.50.4000.0) пакет обновления 2.

PS: этот вопрос основан на статье Аарона Бертрана .
1 2

1 ответ:

Проверка таблицы означает, что SQL Server не использует ваш индекс. Он читает из "кучи". "Куча" - это хранилище данных для таблиц без кластеризованного индекса.

Поскольку он вообще не касается индекса, SQL Server не нуждается в поиске RID для перехода от индекса к куче.

Причина, вероятно, в том, что по оценкам SQL Server для одного клиента может быть более +/- 100 строк. Оптимизатор будет стараться избегать большого количества поисков.

Вы можете попробовать еще раз с помощью индексируйте только (CustomerID), или добавляя AddresID к вашему предложению where.