Страница 2 из 3

Re: Радикальное увеличение скорости

Добавлено: 21 апр 2009, 10:39
Disillusioned
Поскольку у меня Sybase, то с полной уверенностью тебе не скажу про MS SQL...
Но попробуй так:

Код: Выделить всё

  Dim lCon,lRecSet
  Set lCon = GetADOConnect()
  Set lRecSet = LCon.Execute("CALL lsdbo.xpGetArray... ? 
Если не прокатит попробуй:

Код: Выделить всё

  Dim lCon,lRecSet,sql
  Set lCon = GetADOConnect()
  Set lRecSet = CreateObject("ADODB.RecordSet")
  sql="CALL lsdbo.xpGetArray...
  lRecSet.Open sql,lCon
Если это не прокатит, вот третий вариант

Код: Выделить всё

  Dim lCon,lRecSet,sql
  Set lCon = GetADOConnect()
  Set lRecSet = CreateObject("ADODB.RecordSet")
  sql="SELECT * FROM lsdbo.xpGetArray(...
  lRecSet.Open sql,lCon

Re: Радикальное увеличение скорости

Добавлено: 21 апр 2009, 10:43
Александр
вот - совсем другое дело!!!!!! :wink:
в общем смысл ясен...
я щас прикинул - и понял что много лишнего надо писать, пока отладка...
я так скриптик набросал посмотрел, через неделю переписал и т.д.

когда настройку на продажу выставим тогда только хп :wink: а пока не катит :wink:
но все равно спасибо вроде общая картина по ускорению данного защищенного монстра начинает складываться :wink:

Re: Радикальное увеличение скорости

Добавлено: 21 апр 2009, 14:51
Юрий
Самый лучший вариант это не хп, а функции возвращающие табличный результат.
Это практически View но к которым можно прицепить параметры и очень гибко
управлять результатом.
Советую. :!:

Re: Радикальное увеличение скорости

Добавлено: 21 апр 2009, 14:55
Александр
а что именно советуешь?
вот эта функция lRecSet.Open sql,lCon и возвращает табличный результат в рекордсет

Re: Радикальное увеличение скорости

Добавлено: 21 апр 2009, 15:13
Юрий
Функции базы данных:
Например :

Код: Выделить всё

CREATE FUNCTION LSDBO.GetRezFromBase 
(	
	-- Add the parameters for the function here
	@p1 int, 
	@p2 char
)
RETURNS TABLE 
AS
RETURN 
(
	SELECT * from ........
)
GO
а потом ее используешь

Код: Выделить всё

select * from LSDBO.GetRezFromBase(1,2)

Re: Радикальное увеличение скорости

Добавлено: 21 апр 2009, 15:21
Александр
не... я против написания своих функций в базе
только штатная структура и наполнение - весь анализ внешними функциями COM и внутренними селектами :wink:

Re: Радикальное увеличение скорости

Добавлено: 21 апр 2009, 15:35
Юрий
Я всеравно не пойму чем селект написанный в функции отличается от селекта
написанного в скрипте??? :?

Re: Радикальное увеличение скорости

Добавлено: 21 апр 2009, 15:53
Александр
только тем что он (селект в скрипте) написан без использования программирования БД

Re: Радикальное увеличение скорости

Добавлено: 21 апр 2009, 16:22
Юрий
Да ты что! :shock:
А я думал, что select это и есть прграммирование
базы данных, точнее одна из команд прграммирования. :lol:

Re: Радикальное увеличение скорости

Добавлено: 21 апр 2009, 18:15
Александр
Select - эт не программирование - точно знаю :wink: :wink: :wink:
ладно закончили

Re: Радикальное увеличение скорости

Добавлено: 21 апр 2009, 20:56
Старик Крупский
Конечно, не программирование! Программирование - это update :mrgreen:

Re: Радикальное увеличение скорости

Добавлено: 21 апр 2009, 21:04
Александр
:wink: ты не поверишь я еще в базе, запросы мучаю и ищу быстродействие - но не нахожу

Re: Радикальное увеличение скорости

Добавлено: 22 апр 2009, 08:29
Disillusioned
Юрий писал(а):Самый лучший вариант это не хп, а функции возвращающие табличный результат.
Это практически View но к которым можно прицепить параметры и очень гибко
управлять результатом.
Советую. :!:
Когда я заводил речь о ХП, я имел в виду и procedure и function, т.к. в каждой из поддерживаемой Лоцией СУБД их возможности весьма сильно разнятся.
Если в MS SQL возможна функция возвращающая таблицу, то в Sybase ASA нет (однако ничто не мешает ставить процедуры во FROM и делать с ними любые, в том числе и боковые"lateral" соединения). Т.е. то что в MS SQL - функция, в Sybase ASA - процедура...

Re: Радикальное увеличение скорости

Добавлено: 14 май 2009, 11:15
Александр
Disillusioned - СПАСИБО!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Юрий - СПАСИБО!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
:wink: :wink: :wink: :wink: :wink: :wink: :wink: :wink: :wink:
короче плюнул на предрассудки, написал в базе функцию типа

Код: Выделить всё

ALTER  function [LSDBO].[Ric........
        (@Obj_Mnemo char(256) )
Returns table
 as
  return
( 
  SELECT 
         vv0.value AS ...,
         vv1.value AS ...,
         vv2.value AS ...,
         vv3.value AS ...
...
)
и табличный результат + пару служебных столбцов в многомерный массив Wokrflow типа

Код: Выделить всё

f_EmbeddedSQLSelect ( this , 'select pRating, pObjDescr, pAtrVendor, 0 as pBt, pObjID from LSDBO.Ric...(~''+ vProductTypeCurrent +'~') Order by  '+ if( p_TOP=0,'pObjDescr','pRating desc, pObjDescr') , '' , 'pFormPrice' )
f_RetrieveForm ( this , '' ,  'pFormPrice'  )
Сижу - балдею, скорость это - все!!!!

ps
но все равно я против того чтоб в базу писать свои процедуры и функции :wink: :wink: :wink: :wink:

Re: Радикальное увеличение скорости

Добавлено: 14 май 2009, 12:21
Александр
Еще вопрос...
с табличным ускорением вроде все понятно - а как лучше ускорить выборку блока одиночных переменных
т.е. другими словами мне нужно быстро выполнить ряд разноплановых запросов и передать результату в WorkFlow
как лучше?
написать хп которая наберет строку из полученных результатов - передает ее в WorkFlow где строка уже будет разобрана на составляющие???
или как?
пока варианта лучше скрипта под админом без создания быстрого пользователя не вижу...
делать отдельные процедуры/функции тож смысла вроде нет - т.к. запросов много и они в отладке т.е. могут изменится в любой момент