Eu tenho uma tabela com cerca de 2 milhões de registros. Eu crio um índice espacial, usando os padrões diferentes da caixa delimitadora. Tenho notado que algumas consultas são extremamente rápidas e outras extremamente lentas. O fator determinante aparece no tamanho do polígono usado na consulta.
Em áreas de pesquisa maiores, o uso WITH(INDEX(SIX_FT5))
diminui consideravelmente a consulta (de 0 segundos a mais de 15 segundos). Em áreas de pesquisa menores, exatamente o oposto é verdade.
Aqui estão algumas das consultas que estou testando:
Rápido:
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)
Lento:
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)
Alguém sabe o que está acontecendo aqui?
Respostas:
Como comentado por @Vince :
fonte