У мене є таблиця з приблизно 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)
Хтось знає, що тут відбувається?