Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как ускорить выполнение запроса / 25 сообщений из 28, страница 1 из 2
21.06.2019, 09:38
    #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
21.06.2019, 09:42
    #39829034
Как ускорить выполнение запроса
Либо создавайте индекс покрывающий по полю по которому фильтруете. Либо если не принципиально модифицируйте свой кластерный индекс и туда на первое место ставьте стоблец по котороуми опять-же фильтруете. Либо если редакция позволяет загоняйте данные в кластерный колумнстор.
...
Рейтинг: 0 / 0
21.06.2019, 09:58
    #39829047
nika1058
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить выполнение запроса
Таблица не моя, изменения вносить нельзя.
...
Рейтинг: 0 / 0
21.06.2019, 10:01
    #39829052
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить выполнение запроса
nika1058,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Линкованные серверы. На своем все права есть. С производственного сервера выбираю диапазон данных во временную таблицу в свою базу и выполняю вычисления. Сам select происходит очень долго.
...
Рейтинг: 0 / 0
21.06.2019, 15:02
    #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
21.06.2019, 15:05
    #39829253
vborets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить выполнение запроса
nika1058,

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

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

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


не будет быстрее?
Ещё вариант, может, явно указать индекс?
Он ведь, вообще говоря, есть, но не используется
Либо сервер тупой, либо затраты на лукап будут неоправданно велики.
Вот это нужно проверить.
invmЕсли имеется индекс, где [now] первым столбцом, то можете попробовать так:Да, это отличная идея, хотя эффект зависит от данных, тоже нужно проверять.
...
Рейтинг: 0 / 0
21.06.2019, 15:23
    #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
21.06.2019, 15:34
    #39829275
nika1058
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить выполнение запроса
vboretsУскоряйте сеть... другого решения нет.

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

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


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