powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как ускорить выполнение запроса
25 сообщений из 28, страница 1 из 2
Как ускорить выполнение запроса
    #39829031
nika1058
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется таблица archive ([id] bigint, [tagid] int, [now] datetime, [value] real), [id] - primary key, [now]+[tagid],[now] исторически установленные некластеризованные индексы, содержит 234794111 записей.
Запрос select * from archive where [now] between @dt1 and @dt2 отрабатывает больше 7 минут возвращает около 5 млн. строк. Есть какие-то функции ускоряющие выборку?
...
Рейтинг: 0 / 0
Как ускорить выполнение запроса
    #39829034
Либо создавайте индекс покрывающий по полю по которому фильтруете. Либо если не принципиально модифицируйте свой кластерный индекс и туда на первое место ставьте стоблец по котороуми опять-же фильтруете. Либо если редакция позволяет загоняйте данные в кластерный колумнстор.
...
Рейтинг: 0 / 0
Как ускорить выполнение запроса
    #39829047
nika1058
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таблица не моя, изменения вносить нельзя.
...
Рейтинг: 0 / 0
Как ускорить выполнение запроса
    #39829052
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nika1058,

Типа, функции "а ну ка работать быстро, и чтобы делать ничего не надо было"?
...
Рейтинг: 0 / 0
Как ускорить выполнение запроса
    #39829056
Фотография PsyMisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nika1058,

Так начните с того, что проанализируйте/приложите план выполнения запроса, что физически реально под капотом происходит - понять.
Без этого всего - ниачом, гадание на кофейной гуще

P.S. - использовать * в конструкции SELECT - моветон, признак дурного вкуса
...
Рейтинг: 0 / 0
Как ускорить выполнение запроса
    #39829057
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nika1058Таблица не моя, изменения вносить нельзя.Даже простой индекс ?
Ну нельзя так нельзя. Пусть все работает, как сейчас. Чо 7 минут жалко, что ли ?
...
Рейтинг: 0 / 0
Как ускорить выполнение запроса
    #39829063
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nika1058Таблица не моя, изменения вносить нельзя.Тогда совет какого рода вы хотите услышать?

Вообще, запросы на какие то работы с БД обычно адресуют тем, чьи таблицы/базы/сервер.
"Чужим" что то делать, не имея полномочий, затруднительно.
...
Рейтинг: 0 / 0
Как ускорить выполнение запроса
    #39829075
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey SyrovatchenkoЛибо создавайте индекс покрывающий по полю по которому фильтруете. Либо если не принципиально модифицируйте свой кластерный индекс и туда на первое место ставьте стоблец по котороуми опять-же фильтруете. Либо если редакция позволяет загоняйте данные в кластерный колумнстор .
А как кластерный колумнстор поможет при такой фильтрации?
Без подвоха вопрос.
Колумнстор, как я понимаю, всегда сканируется целиком, вне зависимости от фильтрующего предиката. Т.е. в общем случае там будет не ускорение, а некое гарантированное время выборки.
Или я о чем то не в ту степь?
...
Рейтинг: 0 / 0
Как ускорить выполнение запроса
    #39829083
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggsterSergey SyrovatchenkoЛибо создавайте индекс покрывающий по полю по которому фильтруете. Либо если не принципиально модифицируйте свой кластерный индекс и туда на первое место ставьте стоблец по котороуми опять-же фильтруете. Либо если редакция позволяет загоняйте данные в кластерный колумнстор .
А как кластерный колумнстор поможет при такой фильтрации?
Без подвоха вопрос.
Колумнстор, как я понимаю, всегда сканируется целиком, вне зависимости от фильтрующего предиката. Т.е. в общем случае там будет не ускорение, а некое гарантированное время выборки.
Или я о чем то не в ту степь?

Колумнстор достаточно хорошо жмет данных.
Особенно те, где в полях есть много повторяющихся значений.
Соответственно,
1. Скан такого индекса проходить быстрее (если говорить про IO)
2. Количество данных, которые могут уместиться в кеше (буферпул) больше, а значит при чтение выше вероятность попасть на уже закешированные данные

К запросу с * не относиться, но
3. При выборе только части полей из таблицы, благодаря колоночному хранения, количество вычитываемых данных тоже меньше.
...
Рейтинг: 0 / 0
Как ускорить выполнение запроса
    #39829107
uaggster А как кластерный колумнстор поможет при такой фильтрации? Без подвоха вопрос.
Ну и плюс к тому что сказал msLex можно добавить что в рамках каждой RowGroup колумнстора есть мин/макс по значению каждого столбца. Соотвественно если даты у нас по убыванию/возрастанию хранятся, то лишние RowGroup будут отбрасываться.
...
Рейтинг: 0 / 0
Как ускорить выполнение запроса
    #39829137
nika1058
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем за ответы.
Но, раз, с индексами мне экспериментировать не позволили и функций для ленивых не существует, буду джобом складывать в свою таблицу усредненные значения, а в чужую ходить только за данными за текущий получас.
...
Рейтинг: 0 / 0
Как ускорить выполнение запроса
    #39829152
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чо если обновить статистику по таблице ?
Хоть сабжевое поле без индекса, статистика по нему может быть.
...
Рейтинг: 0 / 0
Как ускорить выполнение запроса
    #39829194
nika1058
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
L_argo,

Пробовала, почти не влияет на скорость.
...
Рейтинг: 0 / 0
Как ускорить выполнение запроса
    #39829198
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nika1058L_argo,

Пробовала, почти не влияет на скорость.Вообще-то ничто не мешает создать индекс по полю.

Поможет - ОК.
Не поможет - удалить.

Как-то навредить он точно не может.
И создастся за какие-то десятки секунд. На хорошем массиве за 5-7 сек.
...
Рейтинг: 0 / 0
Как ускорить выполнение запроса
    #39829209
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argonika1058L_argo,

Пробовала, почти не влияет на скорость.Вообще-то ничто не мешает создать индекс по полю.Отсутствие прав еще как мешает.
...
Рейтинг: 0 / 0
Как ускорить выполнение запроса
    #39829211
nika1058
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
L_argo,

Понимаю, но это политический вопрос, доступ к серверу дали только с условием, что буду только считывать данные ))
...
Рейтинг: 0 / 0
Как ускорить выполнение запроса
    #39829218
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nika1058,

В плане выполнения Clustered Index Scan/Table Scan?
...
Рейтинг: 0 / 0
Как ускорить выполнение запроса
    #39829232
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nika1058это политический вопрос, доступ к серверу дали только с условием, что буду только считывать данные ))Как же вы собираетесь "класть данные в свою таблицу", если доступ к серверу только на чтение???

Вы лучше опишите задачу целиком, и условия её выполнения (что можно делать, и где), может, можно что то придумать.
...
Рейтинг: 0 / 0
Как ускорить выполнение запроса
    #39829237
nika1058
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,

Clustered Index Scan
...
Рейтинг: 0 / 0
Как ускорить выполнение запроса
    #39829246
nika1058
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvg,

Линкованные серверы. На своем все права есть. С производственного сервера выбираю диапазон данных во временную таблицу в свою базу и выполняю вычисления. Сам select происходит очень долго.
...
Рейтинг: 0 / 0
Как ускорить выполнение запроса
    #39829252
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nika1058,

Если имеется индекс, где [now] первым столбцом, то можете попробовать так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
declare @max_id ..., @min_id ...;
 
select top (1)
 @min_id = [id]
from
 archive
where
 [now] >= @dt1
order by
 [now], [id];

select top (1)
 @max_id = [id]
from
 archive
where
 [now] <= @dt2
order by
 [now] desc, [id] desc;

select
 *
from
 archive
where
 [id] between @min_id and @max_id and
 [now] between @dt1 and @dt2;


Вариант
Код: sql
1.
select * from archive with (index = ...) where [now] between @dt1 and @dt2

Тоже может отработать быстрее.
...
Рейтинг: 0 / 0
Как ускорить выполнение запроса
    #39829253
vborets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nika1058,

Ускоряйте сеть... другого решения нет.

Или копируйте всю таблицу себе ночью.. днём работайте у себя с индексами.
...
Рейтинг: 0 / 0
Как ускорить выполнение запроса
    #39829260
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nika1058alexeyvg,

Линкованные серверы. На своем все права есть. С производственного сервера выбираю диапазон данных во временную таблицу в свою базу и выполняю вычисления. Сам select происходит очень долго.А, понятно.
А если вместо переменных использовать константы, то есть написать:
Код: sql
1.
select * from archive where [now] between 'дата 1' and 'дата 2'


не будет быстрее?
Ещё вариант, может, явно указать индекс?
Он ведь, вообще говоря, есть, но не используется
Либо сервер тупой, либо затраты на лукап будут неоправданно велики.
Вот это нужно проверить.
invmЕсли имеется индекс, где [now] первым столбцом, то можете попробовать так:Да, это отличная идея, хотя эффект зависит от данных, тоже нужно проверять.
...
Рейтинг: 0 / 0
Как ускорить выполнение запроса
    #39829268
nika1058
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invmЕсли имеется индекс, где [now] первым столбцом, то можете попробовать так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
declare @max_id ..., @min_id ...;
 
select top (1)
 @min_id = [id]
from
 archive
where
 [now] >= @dt1
order by
 [now], [id];

select top (1)
 @max_id = [id]
from
 archive
where
 [now] <= @dt2
order by
 [now] desc, [id] desc;

select
 *
from
 archive
where
 [id] between @min_id and @max_id and
 [now] between @dt1 and @dt2;



Вариант
Код: sql
1.
select * from archive with (index = ...) where [now] between @dt1 and @dt2


Тоже может отработать быстрее.

Спасибо! В половину быстрее оба варианта.
...
Рейтинг: 0 / 0
Как ускорить выполнение запроса
    #39829275
nika1058
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vboretsУскоряйте сеть... другого решения нет.

Или копируйте всю таблицу себе ночью.. днём работайте у себя с индексами.

Не получится, сводка будет не актуальна. Данные в таблицу прилетают по несколько раз в секунду, да еще с 8-ми конвейеров.
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как ускорить выполнение запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]