powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему настолько отличается скорось выполнения запроса ?
25 сообщений из 37, страница 1 из 2
Почему настолько отличается скорось выполнения запроса ?
    #37450471
iboobel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день всем!

Есть вот такой запрос:

Код: plaintext
1.
2.
SELECT table1.field1
from table1, (select table2 from table2 where table2.date_id >= '20110101     0     0' and table2.date_id < '20110102     0     0') as tmp
where table1.field2= tmp.field2

Выполняется быстро, конструкции подсмотрел через профайлер в 1с

но если вот это '20110101 0 0' перенести в переменную - тогда время увеличивается в десятки раз.

например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
DECLARE @date_start
DECLARE @date_end
set @date_start = "манипуляции с датой"+'     0     0'
set @date_end = "манипуляции с датой"+'     0     0'

SELECT table1.field1
from table1, (select table2 from table2 where table2.date_id >= @date_start and table2.date_id < @date_end) as tmp
where table1.field2= tmp.field2

Почему так?
...
Рейтинг: 0 / 0
Почему настолько отличается скорось выполнения запроса ?
    #37450474
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что запросы разные. И, скорее всего, с разным планом.
...
Рейтинг: 0 / 0
Почему настолько отличается скорось выполнения запроса ?
    #37450484
iboobel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А чем они разные ?
...
Рейтинг: 0 / 0
Почему настолько отличается скорось выполнения запроса ?
    #37450488
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iboobelА чем они разные ?
Тем, что в одном случае сервер знает накладываемые ограничения, а в другом - нет.
...
Рейтинг: 0 / 0
Почему настолько отличается скорось выполнения запроса ?
    #37450494
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iboobel,

уточню: знает накладываемые ограничения во время компиляции .
...
Рейтинг: 0 / 0
Почему настолько отличается скорось выполнения запроса ?
    #37450495
http://www.sql.ru/blogs/somewheresomehow

последние(на данный момент) три статьи.
...
Рейтинг: 0 / 0
Почему настолько отличается скорось выполнения запроса ?
    #37450496
iboobel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iljyiboobelА чем они разные ?
Тем, что в одном случае сервер знает накладываемые ограничения, а в другом - нет.
И ему приходится перебирать всю таблицу и сравнивать с переменной ? правильно я понял ?
...
Рейтинг: 0 / 0
Почему настолько отличается скорось выполнения запроса ?
    #37450498
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iboobeliljyпропущено...

Тем, что в одном случае сервер знает накладываемые ограничения, а в другом - нет.
И ему приходится перебирать всю таблицу и сравнивать с переменной ? правильно я понял ?
Неправильно. В случае констант сервер может более точно оценить количество выбираемых записей и соответственно оптимизировать выполнение. Посмотрите в план уже наконец.
...
Рейтинг: 0 / 0
Почему настолько отличается скорось выполнения запроса ?
    #37450519
iboobel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотрел, видно что в первом случае перебрал 18 000 строк, в другом 1 500 000
...
Рейтинг: 0 / 0
Почему настолько отличается скорось выполнения запроса ?
    #37450531
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iboobelПосмотрел, видно что в первом случае перебрал 18 000 строк, в другом 1 500 000
И все? При тех же значениях параметров? Быть такого не может, должны еще операции отличаться.
...
Рейтинг: 0 / 0
Почему настолько отличается скорось выполнения запроса ?
    #37450533
может у вас после манипуляций с датами совсем другие значения получаются?
вы проверяли?
...
Рейтинг: 0 / 0
Почему настолько отличается скорось выполнения запроса ?
    #37450548
VladimirKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iboobel,
Данные достаете видимо из таблиц _1SENTRY, _1SJOURN или из регистров...

А зачем так длинно:
set @date_start = "манипуляции с датой"+' 0 0'

вполне достаточно:
DATE_TIME_IDDOC>='20110921' and DATE_TIME_IDDOC<'20110922'

И еще, иногда бывает очень полезно добавить в индексы, где индексируется DATE_TIME_IDDOC, включенные столбцы с необходимыми для выборки данными.
1С 7.7 такие манипуляции с индексами терпит.
...
Рейтинг: 0 / 0
Почему настолько отличается скорось выполнения запроса ?
    #37450561
iboobel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сори, таки отличаются.

В первом случае (время более минуты)
clustered index scan (cost 93 %) >>> Parallelism (cost 7%) >>> Select (cost 0%)

В другом (время 1 секунда)
index seek (cost 0%) >>> bookmark lookup 100% >>> select 0%
...
Рейтинг: 0 / 0
Почему настолько отличается скорось выполнения запроса ?
    #37450569
iboobel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VladimirKr, да из регистров )
...
Рейтинг: 0 / 0
Почему настолько отличается скорось выполнения запроса ?
    #37450579
VladimirKr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iboobel,
Дык попробуйте убрать bookmark lookup включенными столбцами, если столбцов немного.
...
Рейтинг: 0 / 0
Почему настолько отличается скорось выполнения запроса ?
    #37450592
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iboobelСори, таки отличаются.

В первом случае (время более минуты)
clustered index scan (cost 93 %) >>> Parallelism (cost 7%) >>> Select (cost 0%)

В другом (время 1 секунда)
index seek (cost 0%) >>> bookmark lookup 100% >>> select 0%
Проще всего задать принудительно использование индекса with index...
...
Рейтинг: 0 / 0
Почему настолько отличается скорось выполнения запроса ?
    #37450651
step_ks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladimirKriboobel,
Дык попробуйте убрать bookmark lookup включенными столбцами, если столбцов немного.
запрос с букмарком вроде автора вполне устраивает
...
Рейтинг: 0 / 0
Почему настолько отличается скорось выполнения запроса ?
    #37451305
iboobel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
step_ksVladimirKriboobel,
Дык попробуйте убрать bookmark lookup включенными столбцами, если столбцов немного.
запрос с букмарком вроде автора вполне устраивает
Да, вполне устраивает.
Я не совсем понял они по разному выполняются, сделал через exec (@sql) и временную таблицу.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SET @sql = 'select table2 into #temptable from table2 where table2.date_id >='+@date_start+' and table2.date_id < '+@date_end+'

exec (@sql)

SELECT table1.field1
from table1, #temptable
where table1.field2= #temptable.field2

Может не очень феншуйно, но работает
...
Рейтинг: 0 / 0
Почему настолько отличается скорось выполнения запроса ?
    #37451325
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iboobelstep_ksпропущено...

запрос с букмарком вроде автора вполне устраивает
Да, вполне устраивает.
Я не совсем понял они по разному выполняются, сделал через exec (@sql) и временную таблицу.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SET @sql = 'select table2 into #temptable from table2 where table2.date_id >='+@date_start+' and table2.date_id < '+@date_end+'

exec (@sql)

SELECT table1.field1
from table1, #temptable
where table1.field2= #temptable.field2

Может не очень феншуйно, но работает Сказки рассказываете!
...
Рейтинг: 0 / 0
Почему настолько отличается скорось выполнения запроса ?
    #37451326
step_ks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iboobelЯ не совсем понял они по разному выполняются, сделал через exec (@sql) и временную таблицу.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SET @sql = 'select table2 into #temptable from table2 where table2.date_id >='+@date_start+' and table2.date_id < '+@date_end+'

exec (@sql)

SELECT table1.field1
from table1, #temptable
where table1.field2= #temptable.field2

Может не очень феншуйно, но работает
временная таблица то зачем? сразу без into пишите тогда уж. Или у вас там не так все просто как вы показываете?
...
Рейтинг: 0 / 0
Почему настолько отличается скорось выполнения запроса ?
    #37451333
step_ks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и как это вы так ловко поймали снаружи созданную в exec-е таблицу с одной решеткой?
...
Рейтинг: 0 / 0
Почему настолько отличается скорось выполнения запроса ?
    #37451334
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так попробуйте

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
DECLARE @date_start
DECLARE @date_end
set @date_start = "манипуляции с датой"+'     0     0'
set @date_end = "манипуляции с датой"+'     0     0'

SELECT table1.field1
from table1, (select table2 from table2 where table2.date_id >= @date_start and table2.date_id < @date_end) as tmp
where table1.field2= tmp.field2
option(recompile)
...
Рейтинг: 0 / 0
Почему настолько отличается скорось выполнения запроса ?
    #37451337
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
step_ks, таблица создаётся где-то раньше, а не в экзеке
...
Рейтинг: 0 / 0
Почему настолько отличается скорось выполнения запроса ?
    #37451346
step_ks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shakillstep_ks, таблица создаётся где-то раньше, а не в экзеке
а зачем тогда показывать , что создается в экзеке?
...
Рейтинг: 0 / 0
Почему настолько отличается скорось выполнения запроса ?
    #37451352
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
step_ksа зачем тогда показывать , что создается в экзеке?
могу только предположить, что таблица создана два раза - и снаружи, и в динамике
пусть ТС сам скажет )
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Почему настолько отличается скорось выполнения запроса ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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