|
Проблемы с параметрами
|
|||
---|---|---|---|
#18+
У меня проблемы с параметрами. Что-то он долго загружается Parameter2, буквально 1 мин прошло. Нашла ошибку Parameter2, что слишком много цифр. Мне нужно, чтобы он открывал 2-5 сек. Как мне быть и как по другому написать? Parameter1 select '' station union select 'Молоко' union select 'Сметаны' Parameter2 select distinct addr, case when addr like N'Считыватель WIE1_%' then substring(addr,17,len(addr)) else addr end address from BIS.BISEventLog.dbo.vw_LogEventByEmployee where (addressid in (6755,5309,6770,6820,6871,6817,6694,6851,6487,6762,6771,6357,6819,6853,6826,6852,6825,6824, 6850,6743,6602) and @product='Молоко') or (addressid in (6037,6355,6040,5101,5312,5309,4305,6354,5302,5426,5151,5156,5286,6357,3366,3369,5422,6311,6310,6314,6352,6359,6361,6360) and @product='Сметана') or (addressid in (6601,6024,6604,6759,6693,5302,6025,5869,6779,6783,6786,6813,6838,5286,5539,5538,5548,5867,5868,6814,6785,6900,5547) and @product='Птицы') or (addressid in (6042,6034,6486,6044,6028,6027,6031,6026,5921,6045,6043,6035,6488,5355,6036,6032,5345,6041) and @product='Йогурт') or (addressid in (5278,5277,6047,6507,5261,5300,5301,5152,5306,5891,5305,6490,5541,6483,5307,6506,6508,6498,6500,6484,5294,5295,6503,6482) and @product='Творог') or (addressid in (6752,6606,6710,6751,6774,6746,6766,6713,5154,6841,6843,6830,6835,6790,6760,6809,6854,6753,6768,6764,6816,6833) and @product='Сыр') or (addressid in (6827,6883,6750,6818,6787,6812,6781,6804,6780,6879,6788,6832,6831,6849,6878,6828,6806,6784,6865,6880,6805,6782,6769,6811,6848,6876,6807,6829) and @product='Масло') order by addr ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2014, 12:36 |
|
Проблемы с параметрами
|
|||
---|---|---|---|
#18+
Persik_85, проблема то не в параметре, а в запросе. Тут сложно что-то конкретное посоветовать. Структура бд неизвестна и, судя по всему, далеко не оптимальна. Вы собрали в одном запросе довольно ресурсоёмкие операторы(distinct, in, order) и поэтому не приходится удивляться, что запрос выполняется столь долго. Если не стоит индексирование на addressid, то можно его добавить, это ускорит выполнение запроса. И ещё предлагаю перенести код запроса во вьюху или сохранённую процедуру и там уже шаманить с оптимизацией. А в параметре сделать выборку уже из вьюхи или сохранённой процедуры. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2014, 11:41 |
|
Проблемы с параметрами
|
|||
---|---|---|---|
#18+
Anton Fateev, А разве in ресурсоемкий? На оракле летает. И индексы использует. Меня что-то периодически дергать стали помочь с запросами для MSSQL, чую что и до in скоро дойдет... Топикстартеру: план исполнения запроса смотреть нужно. Антон скорее всего угадал насчет индекса ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2014, 12:52 |
|
Проблемы с параметрами
|
|||
---|---|---|---|
#18+
Anton Fateev, вы не могли мне помочь. Как писать? У меня никак не получается. Я ведь новенькая, всего 3 месяцев обучалась программу. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2014, 14:12 |
|
Проблемы с параметрами
|
|||
---|---|---|---|
#18+
sanBez, проблема не в самом in, а в том как его используют(если без индексов, то о скорости вообще речь идти не может). Один-два in'a - нормально. Три - терпимо. А тут их семь. Опять же неизвестен объём данных. Неизвестен план выполнения запроса. Непонятно что это за четырёхзначные цифры. У меня почему то есть стойкое ощущение, что от них вообще можно избавиться или написать более элегантно, с меньшим количеством in'ов. Кстати, масштабируемость этого решения близка к нулю. Если что-то поменяется в БД, то придётся переделывать/менять. Где-то тут в соседнем топике топикстартер писала, что это вроде бы какие-то входы/выходы. Если тут мы выбираем только адреса для входов без выходов(или наоборот), то почему бы нам не организовать хотя бы простейшую структуру в БД а-ля: Код: sql 1. 2. 3. 4. 5.
И присоединить её в запросе к таблице vw_LogEventByEmployee. Если моя догадка верна, то запрос сокращается до пары строк кода. Без всяких in. Дальше можно подумать над избавление от distinct. И т.д. Что-то Остапа понесло. Резюмируя можно сказать, что in не зло. Просто надо смотреть как и где он применяется. Всё стандартно, как всегда. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2014, 14:45 |
|
Проблемы с параметрами
|
|||
---|---|---|---|
#18+
Persik_85, >> вы не могли мне помочь. Как писать? У меня никак не получается. Я ведь новенькая, всего 3 месяцев обучалась программу. Как писать что? Не получается что? Я не могу написать за вас ваш запрос. Я не знаю ни предметной области, ни структуры БД. Сейчас вам следует посмотреть есть индекс для поля addressid. Сделать это можно в MS SQL Server Management Studio. Подключаетесь к своему серверу, находите вашу таблицу и смотрите включено у поля индексирование или нет. Более подробно посмотрите в интернете, а то я по памяти пишу. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2014, 14:55 |
|
Проблемы с параметрами
|
|||
---|---|---|---|
#18+
Persik_85, Попробуй для прикола поменять порядок условий: с addressid in (6755,5309,6770,6820,6871,6817,6694,6851,6487,6762,6771,6357,6819,6853,6826,6852,6825,6824, 6850,6743,6602) and @product='Молоко' на @product='Молоко' and addressid in (6755,5309,6770,6820,6871,6817,6694,6851,6487,6762,6771,6357,6819,6853,6826,6852,6825,6824, 6850,6743,6602) и далее аналогично Вдруг сразу повезет? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2014, 15:41 |
|
Проблемы с параметрами
|
|||
---|---|---|---|
#18+
sanBez, у меня была такая идея, но я подумал, что оптимизатор скорее всего это и так сделал. Хотя попытка не пытка. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2014, 16:05 |
|
Проблемы с параметрами
|
|||
---|---|---|---|
#18+
sanBezPersik_85, Попробуй для прикола поменять порядок условий: с addressid in (6755,5309,6770,6820,6871,6817,6694,6851,6487,6762,6771,6357,6819,6853,6826,6852,6825,6824, 6850,6743,6602) and @product='Молоко' на @product='Молоко' and addressid in (6755,5309,6770,6820,6871,6817,6694,6851,6487,6762,6771,6357,6819,6853,6826,6852,6825,6824, 6850,6743,6602) и далее аналогично Вдруг сразу повезет? sanBez, я так и пробовала. Все равно долго загружается. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2014, 06:42 |
|
Проблемы с параметрами
|
|||
---|---|---|---|
#18+
Persik_85, выкладывай план запроса, тогда кто-нить поможет http://msdn.microsoft.com/ru-ru/library/ms172899.aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2014, 11:08 |
|
Проблемы с параметрами
|
|||
---|---|---|---|
#18+
sanBezPersik_85, выкладывай план запроса, тогда кто-нить поможет http://msdn.microsoft.com/ru-ru/library/ms172899.aspx Выкладывать больше ничего нету. Вот, всё что есть!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2014, 12:48 |
|
Проблемы с параметрами
|
|||
---|---|---|---|
#18+
Persik_85, А ссылку я просто так послал? Охохонюшки... (старчески кряхтя) Запрос тормозит. Причина по которой он тормозит непонятна. Гадать бессмысленно, результата не будет. Чтобы ускорить выполнение, надо понять почему он тормозит. Чтобы понять почему он тормозит надо смотреть план выполнения запроса Берешь свой запрос, кидаешь в Visual Studio. Чтобы запустить заводишь переменную тип_параметра, присваиваешь ей, например = 'Молоко' и используешь ее в запросе. Ну типа такого (я не знаток Studio и MSSQL, но здесь куча людей). Смотришь в Visual Studio план запроса. В плане запроса находишь критическую часть (что больше всего тормозит) и решаешь эту проблему (или пишешь сюда: тормозит вот здесь: Cost = yx%, индексы на таблице есть такие-то, записей в таблице вот столько, в результате запроса возвращается записей вот какое дофига (без дистинкта, с дистинктом), как ускорить?) Пока еще ты критической части не видишь А телепаты, умеющие силой мысли анализировать чужую базу, почему-то здесь редко появляются ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2014, 14:05 |
|
Проблемы с параметрами
|
|||
---|---|---|---|
#18+
Все, я сделала. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2014, 06:44 |
|
Проблемы с параметрами
|
|||
---|---|---|---|
#18+
Persik_85, А написать что было и как победила нельзя? Это военная тайна? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2014, 09:59 |
|
Проблемы с параметрами
|
|||
---|---|---|---|
#18+
sanBez, Нашла причину from BIS.BISEventLog.dbo.vw_LogEventByEmployee, т.к. он долго загружается и решила еще одну добавить бД. Итого он быстро открыл. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2014, 10:10 |
|
Проблемы с параметрами
|
|||
---|---|---|---|
#18+
Persik_85 причину from BIS.BISEventLog.dbo.vw_LogEventByEmployee, т.к. он долго загружается тут и вариантов других нет чему тормозить, запрос по одной таблице (если это не view конечно) Создание индекса по addressid не помогло или не пробовала? Persik_85 и решила еще одну добавить бД. Итого он быстро открыл. Что что добавить? Базу данных? Вы точно это хотели сказать? Ну напишите же решение, что-то интересно стало ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2014, 10:29 |
|
|
start [/forum/topic.php?fid=31&msg=38532754&tid=1533818]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
162ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 282ms |
0 / 0 |