|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
Добрый день всем! Есть вот такой запрос: Код: plaintext 1. 2.
Выполняется быстро, конструкции подсмотрел через профайлер в 1с но если вот это '20110101 0 0' перенести в переменную - тогда время увеличивается в десятки раз. например: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Почему так? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 18:36 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
Потому что запросы разные. И, скорее всего, с разным планом. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 18:38 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
А чем они разные ? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 18:45 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
iboobelА чем они разные ? Тем, что в одном случае сервер знает накладываемые ограничения, а в другом - нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 18:47 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
iboobel, уточню: знает накладываемые ограничения во время компиляции . ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 18:49 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 18:49 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
iljyiboobelА чем они разные ? Тем, что в одном случае сервер знает накладываемые ограничения, а в другом - нет. И ему приходится перебирать всю таблицу и сравнивать с переменной ? правильно я понял ? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 18:49 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
iboobeliljyпропущено... Тем, что в одном случае сервер знает накладываемые ограничения, а в другом - нет. И ему приходится перебирать всю таблицу и сравнивать с переменной ? правильно я понял ? Неправильно. В случае констант сервер может более точно оценить количество выбираемых записей и соответственно оптимизировать выполнение. Посмотрите в план уже наконец. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 18:52 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
Посмотрел, видно что в первом случае перебрал 18 000 строк, в другом 1 500 000 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 19:08 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
iboobelПосмотрел, видно что в первом случае перебрал 18 000 строк, в другом 1 500 000 И все? При тех же значениях параметров? Быть такого не может, должны еще операции отличаться. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 19:17 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
может у вас после манипуляций с датами совсем другие значения получаются? вы проверяли? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 19:19 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
iboobel, Данные достаете видимо из таблиц _1SENTRY, _1SJOURN или из регистров... А зачем так длинно: set @date_start = "манипуляции с датой"+' 0 0' вполне достаточно: DATE_TIME_IDDOC>='20110921' and DATE_TIME_IDDOC<'20110922' И еще, иногда бывает очень полезно добавить в индексы, где индексируется DATE_TIME_IDDOC, включенные столбцы с необходимыми для выборки данными. 1С 7.7 такие манипуляции с индексами терпит. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 19:27 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
Сори, таки отличаются. В первом случае (время более минуты) clustered index scan (cost 93 %) >>> Parallelism (cost 7%) >>> Select (cost 0%) В другом (время 1 секунда) index seek (cost 0%) >>> bookmark lookup 100% >>> select 0% ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 19:36 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
VladimirKr, да из регистров ) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 19:41 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
iboobel, Дык попробуйте убрать bookmark lookup включенными столбцами, если столбцов немного. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 19:49 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
iboobelСори, таки отличаются. В первом случае (время более минуты) clustered index scan (cost 93 %) >>> Parallelism (cost 7%) >>> Select (cost 0%) В другом (время 1 секунда) index seek (cost 0%) >>> bookmark lookup 100% >>> select 0% Проще всего задать принудительно использование индекса with index... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 20:01 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
VladimirKriboobel, Дык попробуйте убрать bookmark lookup включенными столбцами, если столбцов немного. запрос с букмарком вроде автора вполне устраивает ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 21:02 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
step_ksVladimirKriboobel, Дык попробуйте убрать bookmark lookup включенными столбцами, если столбцов немного. запрос с букмарком вроде автора вполне устраивает Да, вполне устраивает. Я не совсем понял они по разному выполняются, сделал через exec (@sql) и временную таблицу. Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Может не очень феншуйно, но работает ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2011, 11:39 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
iboobelstep_ksпропущено... запрос с букмарком вроде автора вполне устраивает Да, вполне устраивает. Я не совсем понял они по разному выполняются, сделал через exec (@sql) и временную таблицу. Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Может не очень феншуйно, но работает Сказки рассказываете! ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2011, 11:45 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
iboobelЯ не совсем понял они по разному выполняются, сделал через exec (@sql) и временную таблицу. Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Может не очень феншуйно, но работает временная таблица то зачем? сразу без into пишите тогда уж. Или у вас там не так все просто как вы показываете? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2011, 11:45 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
и как это вы так ловко поймали снаружи созданную в exec-е таблицу с одной решеткой? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2011, 11:46 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
так попробуйте Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2011, 11:47 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
step_ks, таблица создаётся где-то раньше, а не в экзеке ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2011, 11:48 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
Shakillstep_ks, таблица создаётся где-то раньше, а не в экзеке а зачем тогда показывать , что создается в экзеке? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2011, 11:50 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
step_ksа зачем тогда показывать , что создается в экзеке? могу только предположить, что таблица создана два раза - и снаружи, и в динамике пусть ТС сам скажет ) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2011, 11:53 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
iboobel, вы пробовали явно указать индекс или option(recompile), прежде чем устраивать танцы с динамикой? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2011, 11:54 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
iljyiboobelСори, таки отличаются. В первом случае (время более минуты) clustered index scan (cost 93 %) >>> Parallelism (cost 7%) >>> Select (cost 0%) В другом (время 1 секунда) index seek (cost 0%) >>> bookmark lookup 100% >>> select 0% Проще всего задать принудительно использование индекса with index... И forceseek на всякий (если 2008-й) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2011, 12:35 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
step_ksи как это вы так ловко поймали снаружи созданную в exec-е таблицу с одной решеткой? Сори, вот так она создается INTO ##temptable ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2011, 13:30 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
iboobelstep_ksи как это вы так ловко поймали снаружи созданную в exec-е таблицу с одной решеткой? Сори, вот так она создается INTO ##temptable однопользовательское приложение или newid() в качеcтве имени таблицы detected ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2011, 14:01 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
UP !!! тоже на этом застрял. хотелось бы обойтись без Sp_executesql мож кто что придумал? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2013, 13:58 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
Timusхотелось бы обойтись без Sp_executesql мож кто что придумал? Так придумали же несколькими постами выше, option(recompile). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2013, 14:06 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
пробовал option (recompile) ни разу не помогает пока пришлось переделать под sp_executesql :-( ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2013, 12:54 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
Timusпробовал option (recompile) ни разу не помогает пока пришлось переделать под sp_executesql :-( Это очень странно. Можете показать запросы, с которыми у вас такое происходит? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2013, 12:56 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
Гость333Timusпробовал option (recompile) ни разу не помогает пока пришлось переделать под sp_executesql :-( Это очень странно. Можете показать запросы, с которыми у вас такое происходит? set @startmonth2_s = convert(varchar(8), @startmonth2, 112) set @predmonth2_s = convert(varchar(8), @predmonth2, 112) set @data2_s = convert(varchar(8), @data2, 112) + 'Z' SELECT SUM($reg5.СуммаРуб * (1-reg5.debkred*2) ) FROM $Регистр.Покупатели as reg5 (NOLOCK) LEFT JOIN _1SJourn Журн2 (NOLOCK) ON Журн2.IDDoc = reg5.IDDoc WHERE ($reg5.Договор in (SELECT spr5.id from $Справочник.Договоры as spr5 (NOLOCK) where spr5.ParentExt = @kontragent)) AND Журн2.date_time_iddoc >= @startmonth2_s AND Журн2.date_time_iddoc < @Data2_s ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2013, 13:10 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
тем более option (recompile) работает начиная с MS SQL 2005 у нас практически везде 2000 версия ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2013, 13:22 |
|
Почему настолько отличается скорось выполнения запроса ?
|
|||
---|---|---|---|
#18+
Timusтем более option (recompile) работает начиная с MS SQL 2005 у нас практически везде 2000 версия ;-) Нормально option (recompile) начинает работать с 2008SP2. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2013, 23:14 |
|
|
start [/forum/topic.php?all=1&fid=46&tid=1707992]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
194ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 334ms |
0 / 0 |