У меня есть таблица с около 2 миллионов записей. Я создаю пространственный индекс, используя значения по умолчанию, отличные от ограничительной рамки. Я заметил, что некоторые запросы очень быстрые, а некоторые очень медленные. Определяющим фактором является размер многоугольника, используемого в запросе.
В больших областях поиска использование значительно WITH(INDEX(SIX_FT5))
замедляет запрос (от 0 секунд до 15+ секунд). На небольших поисковых площадях, прямо противоположное это правда.
Вот некоторые из запросов, с которыми я тестирую:
Быстро:
SELECT TOP(1000) * FROM [FT5] WHERE (shape.STIntersects(geometry::STGeomFromText('POLYGON ((-133462.805381701 -668610.241000959, 2934415.68824241 -668610.241000959, 2934415.68824241 2200521.65831815, -133462.805381701 2200521.65831815, -133462.805381701 -668610.241000959))', 2264)) = 1)
Медленный:
SELECT TOP(1000) * FROM [FT5] WITH(INDEX(SIX_FT5)) WHERE (shape.STIntersects(geometry::STGeomFromText('POLYGON ((-133462.805381701 -668610.241000959, 2934415.68824241 -668610.241000959, 2934415.68824241 2200521.65831815, -133462.805381701 2200521.65831815, -133462.805381701 -668610.241000959))', 2264)) = 1)
Кто-нибудь знает, что здесь происходит?
Ответы:
Как прокомментировал @Vince :
источник