Почему пространственный индекс не используется?

Фон

Я пытаюсь научиться пользоваться geometry Тип данных в SQL Server и шутит с простым примером.

Теперь я сталкиваюсь с проблемами отсутствия оптимизатора запросов с использованием пространственного индекса, созданного в моей тестовой таблице. Насколько я вижу из документации, тип соединения, которое я выполняю, должен быть совместим с пространственным индексом.

Что мне здесь не хватает?

Код

Код для автономного рабочего примера (CTRL+M для включения фактического плана выполнения):

CREATE TABLE dbo.GeometryTest
(
    id int PRIMARY KEY CLUSTERED NOT NULL,
    temppos geometry NOT NULL
)

CREATE SPATIAL INDEX IX_temppos ON dbo.GeometryTest (temppos)
USING GEOMETRY_AUTO_GRID WITH (
    BOUNDING_BOX = (
        0, 0, 1000, 1000
    )
)

;
-- This CTE is just used to produce multiple rows without a loop
WITH
    L0   AS (SELECT c FROM (SELECT 1 UNION ALL SELECT 1) AS D(c)),
    L1   AS (SELECT 1 AS c FROM L0 AS A CROSS JOIN L0 AS B),
    L2   AS (SELECT 1 AS c FROM L1 AS A CROSS JOIN L1 AS B),
    L3   AS (SELECT 1 AS c FROM L2 AS A CROSS JOIN L2 AS B),
    L4   AS (SELECT 1 AS c FROM L3 AS A CROSS JOIN L3 AS B),
    L5   AS (SELECT 1 AS c FROM L4 AS A CROSS JOIN L4 AS B),
    Nums AS (SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS n
            FROM L5)
INSERT dbo.GeometryTest SELECT TOP 100 n, geometry::STPolyFromText(CONCAT('POLYGON ((',n*10,' ',n*10,',',n*10+15,' ',n*10,',',n*10+15,' ',n*10+15,',',n*10,' ',n*10+15,',',n*10,' ',n*10,'))'), 0) FROM Nums

SELECT * FROM dbo.GeometryTest a INNER JOIN dbo.GeometryTest b ON b.temppos.STOverlaps(a.temppos) = 1

IF EXISTS (SELECT 1 WHERE OBJECT_ID('dbo.GeometryTest') IS NOT NULL) DROP TABLE dbo.GeometryTest

Заметка

Пространственный индекс не используется: введите описание изображения здесь

0 ответов

Другие вопросы по тегам