Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Подскажите как использовать spatial индексы совместно с обычными  [new]
Int23
Guest
Вот есть у меня запросы, в которых я выбираю масштаб детализации и прямоугольник координат, который необходимо извлекать. Когда фильтрую по одному условию (либо масштаб, либо прямоугольник), то все выполняется быстро. А по обоим условиям долго. Вот мои запросы

1. SELECT *
  FROM [M0].[dbo].[water_levels_polygon]
  where 
  [Level]=@level

0.4 сек. , 1135 строк, 

-------------------
2. SELECT *
  FROM [M0].[dbo].[water_levels_polygon]
  where 
  [Level]=@level
  and 
  @region.STIntersects([geom])=1

7 сек, 455 строк, 

-------------------
Тот же запрос для крупного масштаба и меньшего прямоуголььника
260 строк, 0.4 сек.



Мне нужно чтобы запрос 2 работал быстро. В аттаче план выполнения

К сообщению приложен файл (exex_plan2.sqlplan - 91Kb) cкачать
30 авг 12, 13:41    [13088563]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как использовать spatial индексы совместно с обычными  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6727
У вас не актуальный план, а оценочный.
При этом пишет:
Columns With No Statistics:
[M0].[sys].[extended_index_1285579618_384000].Cell_Attributes;
[M0].[sys].[extended_index_1285579618_384000].SRID;
[M0].[sys].[extended_index_1285579618_384000].pk0
Что какбэ намекает что нужно обновить статистику.
UPDATE STATISTICS dbo.water_levels_polygon WITH FULLSCAN;

Но я не спец, может быть этого мало (или не так или мало чё даст).

Планы могут быть разными для других "масштабов".
Но главное другое - spatial индексы не реактивные сами по себе, просто с ними лучше чем без них.

PS: Скалярки зло, и не опускайте никогда имена схем (dbo) в названиях.
30 авг 12, 16:20    [13089902]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как использовать spatial индексы совместно с обычными  [new]
serg3
Guest
UPDATE STATISTICS dbo.water_levels_polygon WITH FULLSCAN;

Если и стало быстрее то не более 5%.
Но главное другое - spatial индексы не реактивные сами по себе, просто с ними лучше чем без них.
PS: Скалярки зло, и не опускайте никогда имена схем (dbo) в названиях.


Тут даже проблема в том что геометрический индекс сильно замедляет, из-за того что плохо подходит такой план.

Если фильтрацию разбить на 2 прохода (через временную таблицу): сначала по числовому полю, потом по геометрическому. То ускоряется 10-15 раз. Просто число строк которые оставляет фильтр по геометрическому полю - миллионы (и они перебираются),
а фильтр по [Level] оставляет только 1000 строк.

SELECT *
into #temp1
FROM [M0].[dbo].[water_levels_polygon]
where 
  [Level]=@level 

select * from #temp1
where [geom].STIntersects(@region)=1

drop table #temp1


Так понимаю, единственный выход : для каждого значения [Level], создать отдельный столбец [geom], либо для каждого заначения [Level] по отдельной таблице?
30 авг 12, 17:26    [13090464]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как использовать spatial индексы совместно с обычными  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6727
Или обновится. Ибо обещали что кое что улучшили.
Какая версия.
30 авг 12, 22:23    [13091845]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как использовать spatial индексы совместно с обычными  [new]
serg3
Guest
Версия 2008 R2
Хотя обновиться врядли получится.
31 авг 12, 10:55    [13093279]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как использовать spatial индексы совместно с обычными  [new]
serg3
Guest
В версии 2012 примерно также работает(процентов на 20% быстрее)
19 окт 12, 13:52    [13346672]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить