SqlServer пространственный индекс / фильтрация

У меня есть интересная проблема. У меня есть оператор выбора, сгенерированный GeoServer на ненормализованной таблице. Структура запроса такова

выберите "the_geom".STAsBinary() как "the_geom"
из таблицы
где [куча ands and ors условие]
А ТАКЖЕ
"the_geom".Filter(geometry::STGeomFromText('') = 1;

Этот вопрос занимает около 6 минут. Если я пропущу пространственное условие, вопрос займет около 1 секунды. База данных составляет около 40 ГБ, SQL Server 2014, 26 ГБ ОЗУ. У меня есть пространственный индекс и другие индексы для непространственных частей. Пространственный индекс имеет размер сетки около 600.

Итак, мой вопрос: есть ли способ, как я могу сделать этот вопрос быстрее? Любые твики я могу сделать в SQL Server?

1 ответ

Проблема заключается в том, что пространственный индекс не может содержать столбцы или искать по другим столбцам. Поэтому, если ваше состояние the_geom".Filter(geometry::STGeomFromText('') = 1 возвращает много строк производительность может быть плохой.

В моей практике сервер sql всегда использует пространственный индекс, и вам нужно применить подсказку, если вы хотите использовать другой индекс

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