Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Оптимизация  [new]
Ams
Guest
Возникла примерно такая задача:

Есть квадрат [0,1][0,1], внутри этого квадрата находятся около 500.000 точек, у каждой точки три координаты: x,y (положение внутри квадрата) и z (высота). Пользователь задает регион (прямоугольник), лежащий внутри квадрата и ему выводятся 100 точек, лежащих внутри этого региона с наибольшим z.

Вроде бы все просто, но при реализации у меня возникла проблема со скоростью вытаскивания необходимых данных из базы. Сейчас сделано так: есть таблица с decimal (чтобы сэкономить место, занимаемое базой) полями x,y,z. Созданы 3 индекса: по x (кластерный), по y, по z. Запрос следующий:
select top 100 * from eq where x>@x1 and x<@x2 and y>@y1 and y<@y2 order by z desc

Так вот когда у нас регион маленький, то запрос отрабатывает очень быстро, но лишь стоит задать в качестве границ региона весь квадрат или половину, то MS SQL может крутиться секунд 20, прежде чем выдаст данные :(.

Подскажите, как правильно организовать структуру данных/запрос, чтобы уложиться в секунду/две при таких выборках.
23 ноя 05, 14:27    [2099405]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Попробуйте сделать кластерным индекс (x, y).
23 ноя 05, 14:34    [2099445]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация  [new]
Ams
Guest
Действительно, помогло.

Интересно, что первоначально я пытался создавать некластерный индекс по x,y, но в этом случаем у меня искалось еще хуже...
23 ноя 05, 15:39    [2099862]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Ams
Действительно, помогло.

Интересно, что первоначально я пытался создавать некластерный индекс по x,y, но в этом случаем у меня искалось еще хуже...
Что ж сказать то?... Читаем - https://www.sql.ru/articles/mssql/03013101Indexes.shtml
24 ноя 05, 07:12    [2101824]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить