Гость
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Проблемы с параметрами / 16 сообщений из 16, страница 1 из 1
14.01.2014, 12:36
    #38525451
Persik_85
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с параметрами
У меня проблемы с параметрами. Что-то он долго загружается 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
...
Рейтинг: 0 / 0
15.01.2014, 11:41
    #38526741
Anton Fateev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с параметрами
Persik_85, проблема то не в параметре, а в запросе. Тут сложно что-то конкретное посоветовать. Структура бд неизвестна и, судя по всему, далеко не оптимальна. Вы собрали в одном запросе довольно ресурсоёмкие операторы(distinct, in, order) и поэтому не приходится удивляться, что запрос выполняется столь долго. Если не стоит индексирование на addressid, то можно его добавить, это ускорит выполнение запроса. И ещё предлагаю перенести код запроса во вьюху или сохранённую процедуру и там уже шаманить с оптимизацией. А в параметре сделать выборку уже из вьюхи или сохранённой процедуры.
...
Рейтинг: 0 / 0
15.01.2014, 12:52
    #38526819
sanBez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с параметрами
Anton Fateev,

А разве in ресурсоемкий? На оракле летает. И индексы использует.
Меня что-то периодически дергать стали помочь с запросами для MSSQL, чую что и до in скоро дойдет...

Топикстартеру: план исполнения запроса смотреть нужно. Антон скорее всего угадал насчет индекса
...
Рейтинг: 0 / 0
15.01.2014, 14:12
    #38526954
Persik_85
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с параметрами
Anton Fateev, вы не могли мне помочь. Как писать? У меня никак не получается. Я ведь новенькая, всего 3 месяцев обучалась программу.
...
Рейтинг: 0 / 0
15.01.2014, 14:45
    #38527029
Anton Fateev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с параметрами
sanBez, проблема не в самом in, а в том как его используют(если без индексов, то о скорости вообще речь идти не может). Один-два in'a - нормально. Три - терпимо. А тут их семь. Опять же неизвестен объём данных. Неизвестен план выполнения запроса. Непонятно что это за четырёхзначные цифры. У меня почему то есть стойкое ощущение, что от них вообще можно избавиться или написать более элегантно, с меньшим количеством in'ов. Кстати, масштабируемость этого решения близка к нулю. Если что-то поменяется в БД, то придётся переделывать/менять.

Где-то тут в соседнем топике топикстартер писала, что это вроде бы какие-то входы/выходы. Если тут мы выбираем только адреса для входов без выходов(или наоборот), то почему бы нам не организовать хотя бы простейшую структуру в БД а-ля:
Код: sql
1.
2.
3.
4.
5.
TABLE [InputOutput]
(
	 [addressId] [int] NOT NULL,
	 [addressType] [bit] NOT NULL
)



И присоединить её в запросе к таблице vw_LogEventByEmployee.

Если моя догадка верна, то запрос сокращается до пары строк кода. Без всяких in.
Дальше можно подумать над избавление от distinct. И т.д.

Что-то Остапа понесло. Резюмируя можно сказать, что in не зло. Просто надо смотреть как и где он применяется. Всё стандартно, как всегда.
...
Рейтинг: 0 / 0
15.01.2014, 14:55
    #38527048
Anton Fateev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с параметрами
Persik_85,
>> вы не могли мне помочь. Как писать? У меня никак не получается. Я ведь новенькая, всего 3 месяцев обучалась программу.

Как писать что? Не получается что?
Я не могу написать за вас ваш запрос. Я не знаю ни предметной области, ни структуры БД.
Сейчас вам следует посмотреть есть индекс для поля addressid.
Сделать это можно в MS SQL Server Management Studio.
Подключаетесь к своему серверу, находите вашу таблицу и смотрите включено у поля индексирование или нет.
Более подробно посмотрите в интернете, а то я по памяти пишу.
...
Рейтинг: 0 / 0
15.01.2014, 15:41
    #38527131
sanBez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с параметрами
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)

и далее аналогично

Вдруг сразу повезет?
...
Рейтинг: 0 / 0
15.01.2014, 16:05
    #38527170
Anton Fateev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с параметрами
sanBez, у меня была такая идея, но я подумал, что оптимизатор скорее всего это и так сделал. Хотя попытка не пытка.
...
Рейтинг: 0 / 0
16.01.2014, 06:42
    #38527712
Persik_85
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с параметрами
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, я так и пробовала. Все равно долго загружается.
...
Рейтинг: 0 / 0
16.01.2014, 11:08
    #38527884
sanBez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с параметрами
Persik_85,

выкладывай план запроса, тогда кто-нить поможет
http://msdn.microsoft.com/ru-ru/library/ms172899.aspx
...
Рейтинг: 0 / 0
16.01.2014, 12:48
    #38528067
Persik_85
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с параметрами
sanBezPersik_85,

выкладывай план запроса, тогда кто-нить поможет
http://msdn.microsoft.com/ru-ru/library/ms172899.aspx

Выкладывать больше ничего нету. Вот, всё что есть!!!
...
Рейтинг: 0 / 0
16.01.2014, 14:05
    #38528233
sanBez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с параметрами
Persik_85,

А ссылку я просто так послал? Охохонюшки... (старчески кряхтя)

Запрос тормозит.
Причина по которой он тормозит непонятна. Гадать бессмысленно, результата не будет.
Чтобы ускорить выполнение, надо понять почему он тормозит.
Чтобы понять почему он тормозит надо смотреть план выполнения запроса

Берешь свой запрос, кидаешь в Visual Studio. Чтобы запустить заводишь переменную тип_параметра, присваиваешь ей, например = 'Молоко'
и используешь ее в запросе. Ну типа такого (я не знаток Studio и MSSQL, но здесь куча людей).

Смотришь в Visual Studio план запроса.
В плане запроса находишь критическую часть (что больше всего тормозит)

и решаешь эту проблему (или пишешь сюда: тормозит вот здесь: Cost = yx%, индексы на таблице есть такие-то, записей в таблице вот столько, в результате запроса возвращается записей вот какое дофига (без дистинкта, с дистинктом), как ускорить?)
Пока еще ты критической части не видишь

А телепаты, умеющие силой мысли анализировать чужую базу, почему-то здесь редко появляются
...
Рейтинг: 0 / 0
20.01.2014, 06:44
    #38531351
Persik_85
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с параметрами
Все, я сделала.
...
Рейтинг: 0 / 0
21.01.2014, 09:59
    #38532741
sanBez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с параметрами
Persik_85,

А написать что было и как победила нельзя? Это военная тайна?
...
Рейтинг: 0 / 0
21.01.2014, 10:10
    #38532754
Persik_85
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с параметрами
sanBez,
Нашла причину from BIS.BISEventLog.dbo.vw_LogEventByEmployee, т.к. он долго загружается и решила еще одну добавить бД. Итого он быстро открыл.
...
Рейтинг: 0 / 0
21.01.2014, 10:29
    #38532775
sanBez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с параметрами
Persik_85 причину from BIS.BISEventLog.dbo.vw_LogEventByEmployee, т.к. он долго загружается
тут и вариантов других нет чему тормозить, запрос по одной таблице (если это не view конечно)
Создание индекса по addressid не помогло или не пробовала?

Persik_85
и решила еще одну добавить бД. Итого он быстро открыл.

Что что добавить? Базу данных? Вы точно это хотели сказать?


Ну напишите же решение, что-то интересно стало
...
Рейтинг: 0 / 0
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / Проблемы с параметрами / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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