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

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

Топикстартеру: план исполнения запроса смотреть нужно. Антон скорее всего угадал насчет индекса
...
Рейтинг: 0 / 0
Проблемы с параметрами
    #38526954
Persik_85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anton Fateev, вы не могли мне помочь. Как писать? У меня никак не получается. Я ведь новенькая, всего 3 месяцев обучалась программу.
...
Рейтинг: 0 / 0
Проблемы с параметрами
    #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
Проблемы с параметрами
    #38527048
Anton Fateev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Persik_85,
>> вы не могли мне помочь. Как писать? У меня никак не получается. Я ведь новенькая, всего 3 месяцев обучалась программу.

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

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

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

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

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

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

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

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

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

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

А написать что было и как победила нельзя? Это военная тайна?
...
Рейтинг: 0 / 0
Проблемы с параметрами
    #38532754
Persik_85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sanBez,
Нашла причину from BIS.BISEventLog.dbo.vw_LogEventByEmployee, т.к. он долго загружается и решила еще одну добавить бД. Итого он быстро открыл.
...
Рейтинг: 0 / 0
Проблемы с параметрами
    #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]