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

Откуда:
Сообщений: 35
Есть такие данные:

id int,
d datetime

Общее кол-во записей большое.
Кол-во уникальных id ~100.
Добавление и удаление данных происходит редко.

Нужно так хранить данные, что бы быстро получать результаты запросов такого вида:

select id, d
from data
where id = @id and d between @d1 and @d2

select distinct id
from data

select id, min(d), max(d)
from data
group by id


Как лучше всего организовать хранение данных? Или можно запросы как-то по другому написать?

Если просто сохраняю все в одной таблице с кластерным индексом по (id, d), то первый запрос выполняется быстро, а второй и третий - медленно.
Знания ms sql поверхностные. Умею немного писать селекты.
20 ноя 19, 14:50    [22020723]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса  [new]
invm
Member

Откуда: Москва
Сообщений: 9116
stdvb,

1.
create view v_data__id
with schemabinding
as
select
 id, count_big(*) as c
from
 data
group by
 id;
go

create unique clustered index CUIX_v_data__id on v_data__id (id);
go
2.
select id from v_data__id with (noexpand);

select
 a.id, b.min_d, c.max_d
from
 v_data__id a with (noexpand) cross apply
 (select top (1) d from data where id = a.id order by d) b(min_d) cross apply
 (select top (1) d from data where id = a.id order by d desc) c(max_d);
20 ноя 19, 15:03    [22020759]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса / структуры данных  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33245
Блог
stdvb,

Секционирование и колоночный индекс
20 ноя 19, 15:22    [22020809]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация запроса / структуры данных  [new]
stdvb
Member

Откуда:
Сообщений: 35
invm,
Спасибо, работает.

Критик,
Спасибо за вариант, но предыдущее решение подошло, пока что остановлюсь на нем.
20 ноя 19, 15:47    [22020865]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить