Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 помогите советом с запросом  [new]
ther
Member

Откуда:
Сообщений: 839
есть запрос...сам по себе он выполняется быстро..но если я в качестве выводимого поля добавлю вызов функции
CREATE FUNCTION dbo.GetHDDString(@PCID int)
RETURNS varchar(100)
AS
BEGIN
	declare @result varchar(100) 

  SELECT @Result = isnull(@Result,'') + isnull([element],'')+'\' FROM dbo.getpc 
  where [type]=5 and id=@PCID 
  
  return LEFT(@result, LEN(@result)-1)
END
getpc - обычная вьюха с джойнами..выполняется тоже быстро

судть данной процедуры преобразовать
HDD
40
80
160

в 40\80\160

сам запрос где используется GetHDDString

SELECT q.id,q.invNumber,q.isPC,q.DepName DepartName,q.floppy,q.note,q.fio,q.deptype,q.DepartID,
			 q.cpufreq,q.placeid,q.place,q.postid,q.post as postname ,	q.status as StatusName,q.isserver,q.CompDate,
			 MAX(q.Monitor) as Monitor, MAX(q.cpu) as cpu,MAX(q.CD) as CD ,
		   MAX(q.PCmodel) as PCmodel,sum(cast(q.RAM as int)) as RAM, [b]dbo.GetHDDString(q.id)[/b] as HDD,
       
			 MAX(q.MonitorID) as MonitorID, MAX(q.cpuID) as cpuID,MAX(q.CDID) as CDID ,
		   MAX(q.PCmodelID) as modelID,sum(cast(q.RAMID as int)) as RAMID,
       MAX(q.HDDID) as hddID,
       
       
       
       isnull(q.invNumber+': ','')+MAX(q.cpu)+';'+cast(sum(isnull(q.RAM,0)) as varchar) as pcname,
       q.deletionmark,
       q.CreateDate as USCreate,q.UserName as USName
       
    FROM (SELECT *
                ,(CASE [type]
                      WHEN 0 THEN [model]+' '+[element]+' '+cast(cpufreq as varchar)+' Hz'
                      ELSE NULL
                  END) AS cpu
                ,(CASE [type]
                      WHEN 1 THEN [model]+' '+[element]
                      ELSE NULL
                  END) AS Monitor
                ,(CASE [type]
                      WHEN 2 THEN [element]
                      ELSE NULL
                  END) AS CD
                ,(CASE [type]
                      WHEN 3 THEN [element]
                      ELSE NULL
                  END) AS [PCmodel]
                ,(CASE [type]
                      WHEN 4 THEN CAST(element as integer)
                      ELSE NULL
                  END) AS [RAM]
                  
                ,(CASE [type]
                      WHEN 0 THEN elid
                      ELSE NULL
                  END) AS cpuID
                ,(CASE [type]
                      WHEN 1 THEN elid
                      ELSE NULL
                  END) AS MonitorID
                ,(CASE [type]
                      WHEN 2 THEN elid
                      ELSE NULL
                  END) AS CDID
                ,(CASE [type]
                      WHEN 3 THEN elid
                      ELSE NULL
                  END) AS [PCmodelID]
                ,(CASE [type]
                      WHEN 4 THEN elid
                      ELSE NULL
                  END) AS [RAMID]        
                ,(CASE [type]
                      WHEN 5 THEN elid
                      ELSE NULL
                  END) AS [HDDID]        
                  
              FROM getpc
          ) q
    GROUP BY q.id,q.invNumber,q.isPC,q.DepName,q.floppy,q.note,q.fio,q.deptype,
    				 q.DepartID,q.cpufreq,q.placeid,q.place,q.postid,q.post,q.status,q.isserver,
             q.CompDate,q.deletionmark,q.CreateDate,q.UserName
иль может можно как то по другому разрулить?
спасибо
1 сен 11, 11:49    [11211166]     Ответить | Цитировать Сообщить модератору
 Re: помогите советом с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
ther,

скалярная функция в запросе - это почти самое плохое, что Вы могли сделать.
Этого надо всячески избегать.
Даже просто сделать табличную inline функцию и то намного лучше.
В данном же случае тело функции я бы просто вставил в запрос, и всё.
Она же у Вас такая короткая и примитивная!
1 сен 11, 12:30    [11211565]     Ответить | Цитировать Сообщить модератору
 Re: помогите советом с запросом  [new]
ther
Member

Откуда:
Сообщений: 839
iap
да кака в том что это вьюха...а переделывать на процедуру оч не хочется
1 сен 11, 12:35    [11211604]     Ответить | Цитировать Сообщить модератору
 Re: помогите советом с запросом  [new]
замшелый пень
Guest
ther,

а вот сюда же
,(CASE [type]
                      WHEN 5 THEN elid
                      ELSE NULL
                  END) AS [HDDID]   

вот это вот
 SELECT @Result = isnull(@Result,'') + isnull([element],'')+'\' FROM dbo.getpc 
  where [type]=5 and id=@PCID 
  
  return LEFT(@result, LEN(@result)-1) 

впихнуть никак нельзя?


и магический смысл
 +'\'
and
LEFT(@result, LEN(@result)-1) 
раскройте страждущим
1 сен 11, 12:49    [11211713]     Ответить | Цитировать Сообщить модератору
 Re: помогите советом с запросом  [new]
iljy
Member

Откуда:
Сообщений: 8711
ther
iap
да кака в том что это вьюха...а переделывать на процедуру оч не хочется

И что? К вьюхе нельзя обращаться в инлайн-функции??
1 сен 11, 12:51    [11211726]     Ответить | Цитировать Сообщить модератору
 Re: помогите советом с запросом  [new]
замшелый пень
Guest
замшелый пень
раскройте страждущим


а, понял - в одну строку путь собираете.

напишите уже CLR'ный concat (в BOL уже вроде готовый пример написания именно ее есть).
1 сен 11, 12:51    [11211730]     Ответить | Цитировать Сообщить модератору
 Re: помогите советом с запросом  [new]
замшелый пень
Guest
нет, все равно не понял

MAX(q.Monitor) as Monitor, MAX(q.cpu) as cpu,MAX(q.CD) as CD ,
		   MAX(q.PCmodel) as PCmodel,sum(cast(q.RAM as int)) as RAM, [b]dbo.GetHDDString(q.id)[/b] as HDD,
       
			 MAX(q.MonitorID) as MonitorID, MAX(q.cpuID) as cpuID,MAX(q.CDID) as CDID ,
		   MAX(q.PCmodelID) as modelID,sum(cast(q.RAMID as int)) as RAMID,
       MAX(q.HDDID) as hddID

вы так pivot делаете?
1 сен 11, 12:54    [11211767]     Ответить | Цитировать Сообщить модератору
 Re: помогите советом с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
ther
кака
По Фрейду?

Про процедуру я ничего не говорил.
Читайте про inline табличные функции
А в конце и без них сделайте, как я и говорил.
замшелый пень
напишите уже CLR'ный concat
В топку! IMHO
1 сен 11, 13:36    [11212113]     Ответить | Цитировать Сообщить модератору
 Re: помогите советом с запросом  [new]
замшелый пень
Guest
iap
IMHO

вот-вот.
1 сен 11, 13:37    [11212121]     Ответить | Цитировать Сообщить модератору
 Re: помогите советом с запросом  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
iap
замшелый пень
напишите уже CLR'ный concat
В топку! IMHO

Полюбому в топку, т.к. ТС говорит о том, что скорость критична.
1 сен 11, 13:39    [11212143]     Ответить | Цитировать Сообщить модератору
 Re: помогите советом с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
замшелый пень
iap
IMHO

вот-вот.
Дык, всё - IMHO!
Это я так, как бы для смягчения реакции...

Серверная функция по-любому CLR сделает.
В данном случае что в ней такого нельзя написать?
В чём необходимость этой Вашей CLR?
1 сен 11, 13:41    [11212169]     Ответить | Цитировать Сообщить модератору
 Re: помогите советом с запросом  [new]
замшелый пень
Guest
iap,

парсинги и прочая срань DB-движком слабо делаются
1 сен 11, 13:43    [11212183]     Ответить | Цитировать Сообщить модератору
 Re: помогите советом с запросом  [new]
iljy
Member

Откуда:
Сообщений: 8711
замшелый пень
iap,

парсинги и прочая срань DB-движком слабо делаются
А где вы там парсинг увидали?

Кстати, ТС было бы неплохо озвучить версию сервера.
1 сен 11, 13:48    [11212230]     Ответить | Цитировать Сообщить модератору
 Re: помогите советом с запросом  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
замшелый пень
iap,

парсинги и прочая срань DB-движком слабо делаются

В этой ветке есть традиция. Раз в месяц кто-нить приходит и начинает продвигать CLR там, где он нафиг не сдался))). Следующим этапом обычно идет тестирование. И в конце концев этот "кто-то" пропадает. Ну а дальше цикл повторяется.

Прочая срань - это слишком общее определение. Одно можно сказать точно - для склейки строк CLR не нужен.
1 сен 11, 13:49    [11212240]     Ответить | Цитировать Сообщить модератору
 Re: помогите советом с запросом  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
kDnZP
Одно можно сказать точно - для склейки строк CLR не нужен.
Зато вот урлы, к примеру, парсить CLR быстрее, инфа 100%. :P
1 сен 11, 13:50    [11212254]     Ответить | Цитировать Сообщить модератору
 Re: помогите советом с запросом  [new]
замшелый пень
Guest
kDnZP,

как-то вы черезчур эмоционально к вопросу относитесь.

clr.concat - удобное решение позволяющее избавиться от громоздких конструкций.
замеры не приведу, (много) врать не буду; clr-функции парсинга и склейки активно используются, на парсинге есть заметный прирост, на склейке как минимум заметной просадки нет. еще из clr есть работа с файлами. всё.

линейка для нужных измерений есть у каждого интересующегося.
1 сен 11, 13:57    [11212307]     Ответить | Цитировать Сообщить модератору
 Re: помогите советом с запросом  [new]
ther
Member

Откуда:
Сообщений: 839
блин вышел на обед а тут столько всего..
iljy
сервак 2005 сп4
замшелый пень
getpc возвращает данные в примерном виде
devicetitle
hdd40
hdd80
cpuintel
ram128

и тд
а эта вьюха преобразует это все в строку..да что то типа pivot
1 сен 11, 14:06    [11212385]     Ответить | Цитировать Сообщить модератору
 Re: помогите советом с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
замшелый пень
kDnZP,

как-то вы черезчур эмоционально к вопросу относитесь.

clr.concat - удобное решение позволяющее избавиться от громоздких конструкций.
замеры не приведу, (много) врать не буду; clr-функции парсинга и склейки активно используются, на парсинге есть заметный прирост, на склейке как минимум заметной просадки нет. еще из clr есть работа с файлами. всё.

линейка для нужных измерений есть у каждого интересующегося.
А ещё функцию CONCAT добавили в Denali!
1 сен 11, 14:07    [11212392]     Ответить | Цитировать Сообщить модератору
 Re: помогите советом с запросом  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Гавриленко Сергей Алексеевич
kDnZP
Одно можно сказать точно - для склейки строк CLR не нужен.
Зато вот урлы, к примеру, парсить CLR быстрее, инфа 100%. :P

А кто жеж спорит-то? Поддержки регекспов вроде как в SQL нет, так что в этом случае CLR вполне нормальное решение. Я же не против CLR вообще (т.к. C# знаю и постоянно работал с ним до прошлой недели), я против использования CLR там, где он не нужен.
1 сен 11, 14:07    [11212399]     Ответить | Цитировать Сообщить модератору
 Re: помогите советом с запросом  [new]
ther
Member

Откуда:
Сообщений: 839
и фигня еще в том что у одного из наших подразделений стоит еще 7...обещали везде к сентябрю поставить 2005..но пока ориентируюсь на 7...так что пример c xml не катит...хотя и дает прирост во времени чуть более чем в 2 раза
1 сен 11, 14:11    [11212423]     Ответить | Цитировать Сообщить модератору
 Re: помогите советом с запросом  [new]
замшелый пень
Guest
iap
А ещё функцию CONCAT добавили в Denali!

я что-то пропустил или она там все-таки не агрегатная?
1 сен 11, 14:15    [11212454]     Ответить | Цитировать Сообщить модератору
 Re: помогите советом с запросом  [new]
замшелый пень
Guest
ther,

а в виде отдельных строк эти 40 80 160 вам точно нужны? может так и будете 40\80\160 хранить в одной строке?
1 сен 11, 14:17    [11212479]     Ответить | Цитировать Сообщить модератору
 Re: помогите советом с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
замшелый пень
iap
А ещё функцию CONCAT добавили в Denali!

я что-то пропустил или она там все-таки не агрегатная?
Не, не агрегатная. Насколько я понял.
1 сен 11, 14:18    [11212486]     Ответить | Цитировать Сообщить модератору
 Re: помогите советом с запросом  [new]
ther
Member

Откуда:
Сообщений: 839
замшелый пень
проблема в том что проект уже на 99% завершен...и все заточено для того что бы админ подразделения вводил каждый новый винт на определенном ПК как отдельную запись..как собственно и ram..но с рамом проще там просуммировал и все..а с винтами изврат..просто начальник ща в отпуске и я решил просмотреть наиболее "подозрительные скрипты" и по возможности спросить совета...очень не хочется делать глобальные перестройки
1 сен 11, 14:23    [11212557]     Ответить | Цитировать Сообщить модератору
 Re: помогите советом с запросом  [new]
замшелый пень
Guest
ther,

если так выглядит вьюха на 99% завершенного проекта, то лучше да - не влазить :)
1 сен 11, 14:31    [11212636]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить