Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Если в ХП есть условие IF, то скрипт выполняется в 10 раз дольше / 12 сообщений из 12, страница 1 из 1
18.05.2018, 13:53
    #39646713
nibbles
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если в ХП есть условие IF, то скрипт выполняется в 10 раз дольше
Этот скрипт выполняется 10 секунд.
Код: 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.
28.
DECLARE @FindText VARCHAR(4000) = ''

SET NOCOUNT ON 

IF @FindText = ''

    -- сам по себе этот SELECT выполняется за 1 сек, а в составе ХП - за 10 сек
    SELECT TOP 100 caao.City_id, cnt = COUNT(DISTINCT caaa.aut_id)
    FROM core_art_ArtOrganisations caao WITH(NOLOCK)
    JOIN core_art_ArtAutors caaa WITH(NOLOCK) ON caao.art_id = caaa.art_id         
    WHERE caao.City_id IS NOT NULL        
    GROUP BY caao.City_id
    ORDER BY cnt desc, 1

ELSE

    SELECT TOP 100 City_id, cnt = COUNT(DISTINCT caaa.aut_id)
    FROM core_art_ArtIndex i WITH(NOLOCK) 
    JOIN core_art_ArtOrganisations caao WITH(NOLOCK) ON i.art_id = caao.art_id 
    JOIN core_art_ArtAutors caaa WITH(NOLOCK) ON caao.art_id = caaa.art_id         
    WHERE (
        CONTAINS(i.[art_title], @FindText) 
        OR CONTAINS(i.[art_abstract], @FindText) 
        OR CONTAINS(i.[art_keywords], @FindText)
        )
        AND City_id IS NOT NULL
    GROUP BY City_id
    ORDER BY cnt desc, 1



А если запустить просто select, то меньше 1 секунды.
Код: sql
1.
2.
3.
4.
5.
6.
    SELECT TOP 100 caao.City_id, cnt = COUNT(DISTINCT caaa.aut_id)
    FROM core_art_ArtOrganisations caao WITH(NOLOCK)
    JOIN core_art_ArtAutors caaa WITH(NOLOCK) ON caao.art_id = caaa.art_id         
    WHERE caao.City_id IS NOT NULL        
    GROUP BY caao.City_id
    ORDER BY cnt desc, 1



Как победить?
...
Рейтинг: 0 / 0
18.05.2018, 13:56
    #39646716
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если в ХП есть условие IF, то скрипт выполняется в 10 раз дольше
Пересоздать процедуру с опцией WITH ECOMPILE, например
...
Рейтинг: 0 / 0
18.05.2018, 13:57
    #39646717
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если в ХП есть условие IF, то скрипт выполняется в 10 раз дольше
iapПересоздать процедуру с опцией WITH ECOMPILE, напримерRECOMPILE
...
Рейтинг: 0 / 0
18.05.2018, 14:00
    #39646719
nibbles
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если в ХП есть условие IF, то скрипт выполняется в 10 раз дольше
Пробовал WITH RECOMPILE - не помогло :((
Пробовал с заполнением таблицы-переменной - не помогло
Делать разные ХП для пустого и непустого @FindText очень не хочется.
...
Рейтинг: 0 / 0
18.05.2018, 14:19
    #39646728
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если в ХП есть условие IF, то скрипт выполняется в 10 раз дольше
nibbles,

Так включите set statistics io, time on и смотрите. Может там затраты на компиляцию.
И планы выполнения смотрите.
...
Рейтинг: 0 / 0
18.05.2018, 14:20
    #39646729
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если в ХП есть условие IF, то скрипт выполняется в 10 раз дольше
nibblesПробовал WITH RECOMPILE - не помогло :((
Пробовал с заполнением таблицы-переменной - не помогло
Делать разные ХП для пустого и непустого @FindText очень не хочется.
DSQ + with (recompile)
...
Рейтинг: 0 / 0
18.05.2018, 15:17
    #39646765
nibbles
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если в ХП есть условие IF, то скрипт выполняется в 10 раз дольше
Решил проблему использованием временной таблицы, а не таблицы-переменной.
...
Рейтинг: 0 / 0
18.05.2018, 15:21
    #39646768
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если в ХП есть условие IF, то скрипт выполняется в 10 раз дольше
nibblesРешил проблему использованием временной таблицы, а не таблицы-переменной.
жесть
а то что они у вас были, как можно было догадаться?
...
Рейтинг: 0 / 0
18.05.2018, 15:47
    #39646788
nibbles
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если в ХП есть условие IF, то скрипт выполняется в 10 раз дольше
TaPaKnibblesРешил проблему использованием временной таблицы, а не таблицы-переменной.
жесть
а то что они у вас были, как можно было догадаться?

до этого временные таблицы не использовались
...
Рейтинг: 0 / 0
18.05.2018, 15:51
    #39646791
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если в ХП есть условие IF, то скрипт выполняется в 10 раз дольше
nibblesTaPaKпропущено...

жесть
а то что они у вас были, как можно было догадаться?

до этого временные таблицы не использовались
*звук отклеивающихся обоев*
...
Рейтинг: 0 / 0
18.05.2018, 16:08
    #39646796
Посетитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если в ХП есть условие IF, то скрипт выполняется в 10 раз дольше
TaPaK,

абсолютно не защищая авторский стиль изложения, смею предположить, что речь таки идет о том, что изначально был просто селект, и он тормозил.
В ходе исследований, селект превратился в инсерт в табличную переменную. не помогло.
Следующим шагом табличная переменная сменилась на темповую таблицу.

намек на это есть в

nibblesПробовал WITH RECOMPILE - не помогло :((
Пробовал с заполнением таблицы-переменной - не помогло
Делать разные ХП для пустого и непустого @FindText очень не хочется.


на абсолютную истинность предположений не претендую
...
Рейтинг: 0 / 0
18.05.2018, 16:14
    #39646800
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Если в ХП есть условие IF, то скрипт выполняется в 10 раз дольше
Посетитель,

всё перечисленное не меняет длительность выполнения в тех масштабах который указал ТС. Скорее всего он смог всё таки сделать перекомпиляцию или у него дикий вариант с INSERT INTO EXEC sp
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Если в ХП есть условие IF, то скрипт выполняется в 10 раз дольше / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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