Как я могу указать эту подсказку индекса SQL в моем запросе SQL Server 2008? - PullRequest
4 голосов
/ 15 ноября 2010

Я не уверен, где и как я могу указать эту подсказку пространственного индекса SQL в своем запросе: -

SELECT Whatever
FROM Table1 a
    INNER JOIN Table2 b ON a.Id = b.Id
WHERE @SomeBoundingBox.STIntersects(b.SomeGeographyShape) = 1

Когда я запускаю запрос, он НЕ использует пространственную подсказку. Да, я использую последнюю версию SQL Server 2008 r2 (v 10.5.1600.1 ).

Итак, чтобы сравнить скорость запроса с помощью подсказки, я попытался ...

SELECT Whatever
FROM Table1 a
    INNER JOIN Table2 b WITH (INDEX(MySpatialIndex)) ON a.Id = b.Id
WHERE @SomeBoundingBox.STIntersects(b.SomeGeographyShape) = 1

и это сработало, но это было действительно плохое исполнение. Мне было интересно, пытался ли он использовать мою подсказку для соединения a.Id = b.Id (для которого я не хочу использовать подсказку).

Есть предложения?

UPDATE:

Добавлен план запроса. Основная часть стоимости - это соединение между двумя таблицами. Фильтр (предложение where) занимает вторую наиболее дорогостоящую часть.

alt text

Ответы [ 2 ]

0 голосов
/ 15 ноября 2010

Почему вы думаете, что проблема в предложении ON?Вы используете функцию в части WHERE, примененную к таблице b, поэтому у вас есть fullscan для вашей таблицы a и частичное сканирование для таблицы b.

0 голосов
/ 15 ноября 2010

Я бы предложил НЕ форсировать подсказку.Существует причина, по которой SQL Server выбирает план выполнения, и, как вы подозревали, принудительное использование другого плана почти всегда приводит к снижению производительности.

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

...