powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / какая ДБМС самая "шустрая" для выполнения хранимых процедур?
25 сообщений из 117, страница 2 из 5
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37512057
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikron Я удивляюсь, сколько здесь людей, которые не умеют читать :)Вы спрашиваете каким именно микроскопом лучше забивать гвозди. Вам отвечают, что лучше это делать молотком. Вы обижаетесь.
...
Рейтинг: 0 / 0
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37512068
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257mikron Я удивляюсь, сколько здесь людей, которые не умеют читать :)Вы спрашиваете каким именно микроскопом лучше забивать гвозди. Вам отвечают, что лучше это делать молотком. Вы обижаетесь.

ни в коем разе не обижаюсь.
Пусть будет по вашему. вы мне подксажите, каким микроскопом быстрей?

П.С. Тест для АСА может в понедельник накатаю.
...
Рейтинг: 0 / 0
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37512084
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257mikron Я удивляюсь, сколько здесь людей, которые не умеют читать :)Вы спрашиваете каким именно микроскопом лучше забивать гвозди. Вам отвечают, что лучше это делать молотком. Вы обижаетесь.


Человек спрашивает каким образом быстрее и качественне скрепить 2^N досок.
Сейчас он пользуется микроскопом..

Я бы вместо молотка посоветовал шеруповерт.
Качество выше ( гвозди гаранитровано не загибаются),
усилий меньше, (не нужно махать) и т д.

Я бы тему сформулировал так :
молоток( микроскоп) vs шуруповерт( или другой инструмент, что бы руками не махать)
...
Рейтинг: 0 / 0
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37512116
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronПусть будет по вашему. вы мне подксажите, каким микроскопом быстрей?
Оракулом. Его ХП быстрее всех выполнит тучу простых запросов типа "select 0 from dual".
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37512170
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikron, на абстрактный вопрос, где ХП теоретически могут выполнятся быстрее чем у других, я бы посоветовал DB2. Ее ХП компилируются в dll и аттачатся к серваку. Т.е. в теории накладных расходов на интерпретация как-бы меньше. Но у всех приличных серваков давно существует кэш процедур, кэш планов итп вещи, так что не все так однозначно.
И на счет АСА вы не говорили, что вас не интерисуют идеи по поводу ее ускорения. Во всяком случаем реакции на мое предложение поиграться уровнем оптимизации не последовало.
...
Рейтинг: 0 / 0
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37512539
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronВозник пока теоретичекий вопрос, а какая ДБМС самая "шустрая"
при обработки последователности многих относително лёгких запросов из процедур.Чтож, на столь теоретический вопрос, теоретический ответ:

В некоторых случаях быстрее будет одна СУБД, в других- другая, а в третьих - третья.

Подробнее: Если у нас есть процедуры и в них запросы Z k (k=1.n) ; СУБД S k (k=1..n) , каждая с параметрами для оптимизации PS k,n причем они для каждой СУБД разные, и некоторые параметры немного ускоряют некоторые запросы, но сильно замедляют другие, а другие параметры сильно ускоряют одни запросы но немного замедляют другие.. то очевидно - см. выше.


mikronЯ удивляюсь, сколько здесь людей, которые не умеют читать :)
Для тех, кто читает через слово:
меня не волнуют:
<skip>
меня инересует _сравнение_ ДБМС.ок, а теперь, оффтоп (дл тех, кто не понимает ответы):
у меня есть легковая машина, она начала слегка перегреваться, оказалось, надо долить охлаждающую жидкость. Я думаю теоретически, может быть не доливать, а купить другую машину, которая будет лучше работать в этих условиях?
...
Рейтинг: 0 / 0
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37514387
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ggg_oldя бы посоветовал DB2. Ее ХП компилируются в dll и аттачатся к серваку.К сожалению, эта информация немного устарела. Лет так на несколько. Если речь о DB2 LUW, конечно - вряд ли тут кого интересуют мейнфреймы :)
В DB2 LUW ХП писанные и на SQL PL, и на PL/SQL компилячатся в один и тот же байт-код, исполняемый сервером. Похоже на Оракл.
Другое дело, что триггеры и функции на спец. подмножестве SQL PL вообще не компилячаться, а inline подставляются в вызвавший запрос и с ним оптимизируются, что м.б. весьма эффективно.
Кроме того, можно писать ХП на нативных и не очень языках (C++, Java, ...). А вот компиляченный C++ уже может выполняться в адресном пространстве сервера, экономя ресурсы.
...
Рейтинг: 0 / 0
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37514405
Favn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mikronодин вызов процедуры приводик к выполению ~10000 легковесных запросов и ~ 1000 инсертов/делитов из временных таблицА вот тут я бы посоветовал DB2 по другой причине - в ХП может применяться "статическая" компиляция запросов (не динамических, конечно) - их синт. анализ, оптимизация и план строятся при первом выполнении (или при компиляции), серьезно экономя время. Перестроить планы можно отдельной командой во время минимальной нагрузки или после серьезного изменения данных.
PS. Такое количество запросов в одной ХП наталкивают на мысль об необходимости использования комплексных CTE вместо этой кучи.
...
Рейтинг: 0 / 0
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37514539
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот попытался изобразить основной паттерн использования для Сайбейс АСА.
Давате мерятся, кто быстрее.
На АСА-12 25 секунд.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
create table t1 (c1 integer not null, c2 integer not null, c3 integer not null, c4 integer not null, primary key (c1, c4))
/

create index t1i1 on t1 (c1, c3, c2)
/

create global temporary table t2 (c1 integer not null, c2 integer not null, c3 integer not null)
not transactional 
/

begin
	declare @i integer;
    declare @j integer;

    delete from t1;
	set @i =  1000 ;
	while @i >  0  loop
		set @j =  20 ;
		while @j >  0  loop
			insert into t1(c1, c2, c3, c4)
			values (@i, round( 1000  * rand(),  0 ), round( 1000  * rand(),  0 ), @j);
			set @j = @j -  1 ;
		end loop;
		set @i = @i -  1 ;
	end loop;
	commit;
end;
/

create or replace procedure my_test()
no result set
begin
	declare @p integer;
	declare @i integer;
	declare @j integer;
	
	delete from t2;
	
	set @p = round( 1000  * rand(),  0 );
	set @i =  1000000 ;
	while @i >  0  loop
		set @j = round( 1000  * rand(),  0 );
	
lbl_each_t:
	    for each_t as cur_t no scroll cursor for 
	        select top  10  c2 as @cur_c2
		  from t1
		  where c1 = @p
		  order by abs(c3 - @j) desc
	    do
			insert into t2 (c1, c2, c3)	values (@p, @cur_c2, @j);
			if @cur_c2 != @p then
				set @p = @cur_c2;
				if rand() >  0 . 4  then
					leave lbl_each_t;
				end if;
			end if;
		end for;
		set @i = @i -  1 ;
	end loop;
end;
/

select count(*) from t2;
select * from t2;

...
Рейтинг: 0 / 0
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37514593
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДохтаРЧеловек спрашивает каким образом быстрее и качественне скрепить 2^N досок.

ещё один писАтель. Где это я спашивал, "каким образом"? Не припомню.
А спрашивал "каким микроскопом/шуруповертом/... (по фантазии читателя) удобней".
А на грабли я сам наступать мастер.
...
Рейтинг: 0 / 0
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37514632
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S.G.В некоторых случаях быстрее будет одна СУБД, в других- другая, а в третьих - третья.

Никто не отрицает. Я надеюсь что вы так-же не станете отрицать очевидный факт, что есть базы данных, которые лутше подходят для ОЛТП, есть которые специализируются на аналитику,
есть специфические, для ХМЛ, для больших обёмов данных, обейтно-ориентированные и т.д. и т.п. И у некоторых здесь есть большой опыт, который подксазывает, что безполезно ожидать напимер от террадаты победы в ОЛТП десциплине. Вот собственно эти мнения мне и интересны. И вобще, зачем я обьясняю банальные вещи.
Ну давайте сравнивать.

S.G.у меня есть легковая машина, она начала слегка перегреваться, оказалось, надо долить охлаждающую жидкость. Я думаю теоретически, может быть не доливать, а купить другую машину, которая будет лучше работать в этих условиях?
Для тех, кто в мышинах соображает лутьше чем ИТ>
А может действительно лутше новую? Кто сказал что в охлаждаёшей жидкости дело?
А может масло стало в систему охлаждения гнать? А может я на машине стал прицепы тяжёлые таскать, и всё с полной нагрузкой. А может мне вобще самосвал нужен а не пежо 106.
. Вот и судят некоторые опрометчево, и доливают воды,
а через месяц машина в хлам.
...
Рейтинг: 0 / 0
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37515027
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikron ,

Код для СУБД Caché 2012.1.FT4
Class del.t2 Extends %Persistent
{

Parameter SQLTABLETYPE = "GLOBAL TEMPORARY";

Property c1 As %Integer;

Property c2 As %Integer;

Property c3 As %Integer;

}

Class del.t1 Extends %Persistent
{

Property c1 As %Integer;

Property c2 As %Integer;

Property c3 As %Integer;

Property c4 As %Integer;

Index i1 On (c1, c3, c2);

ClassMethod Fill()
{
  set time=$zhorolog
  
  &sql(truncate table del.t1)
  
  for i=1:1:1000 {
    for j=1:1:20 {
      set c2=$random(1000)
      set c3=$random(1000)
      &sql(insert into del.t1(c1,c2,c3,c4) values(:i,:c2,:c3,:j))
    }
  }
  
  write "time=",$zhorolog-time," s.",!
}

ClassMethod MyTest()
{
  set time=$zhorolog
  
  &sql(truncate table del.t2)
  
  set p=$random(1000)
  
  for i=1:1:1000000 {
    set j=$random(1000)

    &sql(declare c cursor for select top 10 c2 from del.t1 where c1 = :p order by abs(c3 - :j) desc for read only)
    &sql(open c)
    for  {
      &sql(fetch c into :curC2)
      quit:SQLCODE
      
      &sql(insert into del.t2(c1,c2,c3) values(:p,:curC2,:j))
      
      if p'=curC2 {
        set p=curC2
        quit:$random(1000000)>400000
      }
    }
    &sql(close c)
  }
  
  write "time=",$zhorolog-time," s.",!
  
  &sql(select count(*) into :count from del.t2)
  write "count=",count,!
}

ClassMethod FillDirect()
{
  set time=$zhorolog
  
  do DISABLE^%NOJRN
  
  do ##class(del.t1).%KillExtent()
  
  set id=0
  for i=1:1:1000 {
    for j=1:1:20 {
      set id=id+1
      set c2=$random(1000)
      set c3=$random(1000)
      set ^del.t1D(id)=$listbuild("",i,c2,c3,j)
      set ^del.t1I("i1",i,c3,c2,id)=""
    }
  }
  
  set ^del.t1D=id
  
  do ENABLE^%NOJRN
  
  write "time=",$zhorolog-time," s.",!
}

}

Результат для метода MyTest() в среднем ~ 12.5 сек (Intel Core Duo 2 6700, RAM 2Gb, XP SP3(x32)):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
TEST>do ##class(del.t1).Fill()
time=.998096 s.

TEST>do ##class(del.t1).MyTest()
time=13.676071 s.
count=14402

TEST>do ##class(del.t1).FillDirect()
time=.075046 s.

PS: вместо SQL можно использовать прямой доступ. В этом случае скорость будет ещё выше. Для примера см. FillDirect() .
...
Рейтинг: 0 / 0
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37515121
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня на аса 10.0.1 на машинке с одним сата винтом, кор2дуо, 1гб вышло около 35 секунд. Поигрался уровнями оптимизации оптимизатора, сущесвенной разницы не заметил.
count(*)=1452
Есть вопрос по тесту. По сути в цикле выполняется многократно один и тот же запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
set @p = round( 1000  * rand(),  0 );
...
select top  10  c2 as @cur_c2
from t1
where c1 = @p
order by abs(c3 - @j) desc
...

т.е. условие в поиске where c1 = @p константное!
В таком случае, оно либо закешируется, либо єто будет просто тест кєшпамяти и процессора.
В такой ситуации все равно, насколько интерпретатор хранимок будет быстро их интерпретировать, все упрется в скорость выполнения этого курсора.
...
Рейтинг: 0 / 0
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37515191
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ggg_oldт.е. условие в поиске where c1 = @p константное!Разве p и j постоянны?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
set @j = round( 1000  * rand(),  0 );
...
if @cur_c2 != @p then
  set @p = @cur_c2;
  if rand() >  0 . 4  then
    leave lbl_each_t;
  end if;
end if;
...
...
Рейтинг: 0 / 0
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37515194
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, извините, проглядел насчет константности.
Но все равно, основная нагрузка - выполнение селекта, а не мелкие вычисления в цикле. Т.е. не суть принципиально, во что там компилит текст хп движок сервера.
...
Рейтинг: 0 / 0
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37515222
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ggg_old ,

Для чистых вычислений, думаю лучше использовать С++ с задействованием GPU, например с помощью интерфейса CallIn .
PS: Опыт использования GPU для финансового моделирования (C#)
...
Рейтинг: 0 / 0
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37515323
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так то ж не мне нужно, а топикстартеру.
Может ему действительно будет лучше написать хп на жаве, загнать исходную таблицу в какой-нибудь массив или иной контейнер и произвести расчет на низком уровне не прибегая к внутренним select'ам? вон на каше как лихо вышло..
...
Рейтинг: 0 / 0
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37515359
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хе-хе, а дома на SA12 на белом iMac (c2d 2.16ГГц) под макосх 45-50 сек! Сижу вот офигеваю, то ли мак такой тормозной, то ли SA12 тормознее на этом тесте чем десятка. Порою дальше.
...
Рейтинг: 0 / 0
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37515397
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
микрон, готовь магарычи :)
разогнал с 50сек до 36. правда заставляет задуматься, что есть некий косячек в реализации, можно продолжить в вашем топике сайбезовой ветки.
...
Рейтинг: 0 / 0
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37515617
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
микрон,
профайлер показал, что треть времени в функции тратится на строку
set @j = round(1000 * rand(), 0);
заменил ее на: set @j = truncnum(1000 * rand(),0);
и оп ля-ля..
Завел у сайбеза топик: http://sqlanywhere-forum.sybase.com/questions/8333/perfomance-issues-with-round-and-truncnum
Если что, присоединяйся там.
Наверное имеет смысл протестить производительность всех математических функций, что у тебя гоняются в циклах, сравнить их с предыдущей версии SA. Жду отзывы :)
...
Рейтинг: 0 / 0
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37515685
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ggg_oldмикрон,
профайлер показал, что треть времени в функции тратится на строку
set @j = round(1000 * rand(), 0);
Жду отзывы :)

Опа, интересный результат. на днях посмотрю / проверю.

На АСА 11 тест проходит за 31 сек.
Машина примерно одинакового класса.
...
Рейтинг: 0 / 0
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37515831
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PostgreSQL 9.1.1 on x86_64-unknown-linux-gnu, compiled by gcc-4.6.real (Debian 4.6.1-15) 4.6.1, 64-bit
AMD Phenom(tm) II X4 955 3210.863 Hz / 4 Гб RAM.

оптимизировать не пытался, просто переписал на постгресовый PL/pgSQL
shared_buffers = 240MB
temp_buffers = 180MB
work_mem = 128MB
maintenance_work_mem = 316MB
synchronous_commit = off
effective_cache_size = 1528MB
constraint_exclusion = on

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
create table t1 (c1 integer not null, c2 integer not null, c3 integer not null, c4 integer not null, primary key (c1, c4));

create index t1i1 on t1 (c1, c3, c2);

create global temporary table t2 (c1 integer not null, c2 integer not null, c3 integer not null);

do
$$
declare
 i integer;
 j integer;
begin
    delete from t1;
    i :=  1000 ;
        while i >  0  loop
                j :=  20 ;
                while j >  0  loop
                        insert into t1(c1, c2, c3, c4)
                        values (i, round( 1000  * random()::numeric,  0 ), round( 1000  * random()::numeric,  0 ), j);
                        j := j -  1 ;
                end loop;
                i := i -  1 ;
        end loop;
end
$$;

create or replace function my_test()
returns void
language plpgsql as $$
declare
 p integer;
 i integer;
 j integer;
 cur_c2 integer;
begin        
        delete from t2;
        
        p := round( 1000  * random()::numeric,  0 );
        i :=  1000000 ;
        while i >  0  loop
                j := round( 1000  * random()::numeric,  0 );
        
<<lbl_each_t>>
            for cur_c2 in
                select c2
                  from t1
                  where c1 = p
                  order by abs(c3 - j) desc
                  limit  10 
            loop
                        insert into t2 (c1, c2, c3)     values (p, cur_c2, j);
                        if cur_c2 != p then
                                p := cur_c2;
                                if random() >  0 . 4  then
                                        exit lbl_each_t;
                                end if;
                        end if;
            end loop;
                i := i -  1 ;
        end loop;
end;
$$;

select count(*) from t2;
select * from t2;

select my_test();

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
$ psql -f Документы/test.sql

Timing is on.
psql:Документы/test.sql:1: NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "t1_pkey" for table "t1"
CREATE TABLE
Time: 49,746 ms
CREATE INDEX
Time: 25,207 ms
CREATE TABLE
Time: 0,740 ms
DO
Time: 830,874 ms
CREATE FUNCTION
Time: 0,666 ms
 count 
-------
     0
(1 row)

Time: 0,272 ms
 c1 | c2 | c3 
----+----+----
(0 rows)

Time: 0,071 ms
 my_test 
---------
 
(1 row)

Time: 35998,862 ms

35 секунд.
...
Рейтинг: 0 / 0
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37515854
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select count(*) перед функцией а не после %) ну ладно...
...
Рейтинг: 0 / 0
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37516276
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
микрон, проверил на работе на SA10.
Результат 36 сек с round против 30сек с truncnum()
15-20 прирост на ровном месте.. :) дрючте сайбезовый саппорт..
...
Рейтинг: 0 / 0
какая ДБМС самая "шустрая" для выполнения хранимых процедур?
    #37516630
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал вариант MyTest() с использованием прямого доступа вместо SQL. Скорость возросла на порядок.
SQL и NoSQL вариантыClass del.t2 Extends %Persistent
{
Parameter SQLTABLETYPE = "GLOBAL TEMPORARY";
Property c1 As %Integer;
Property c2 As %Integer;
Property c3 As %Integer;
}

Class del.t1 Extends %Persistent
{

Index i1 On (c1, c3, c2);

Property c1 As %Integer;
Property c2 As %Integer;
Property c3 As %Integer;
Property c4 As %Integer;

ClassMethod Fill()
{
  set time=$zhorolog
  
  &sql(truncate table del.t1)
  
  for i=1:1:1000 {
    for j=1:1:20 {
      set c2=$random(1000)
      set c3=$random(1000)
      &sql(insert into del.t1(c1,c2,c3,c4) values(:i,:c2,:c3,:j))
    }
  }
  
  write "time=",$zhorolog-time," s.",!
}

ClassMethod MyTest()
{
  set time=$zhorolog
  
  &sql(truncate table del.t2)
  
  set p=$random(1000)
  
  for i=1:1:1000000 {
    set j=$random(1000)

lblEachT

    &sql(declare c cursor for select top 10 c2 from del.t1 where c1 = :p order by abs(c3 - :j) desc for read only)
    &sql(open c)
    for  {
      &sql(fetch c into :curC2)
      quit:SQLCODE
      
      &sql(insert into del.t2(c1,c2,c3) values(:p,:curC2,:j))
      
      if p'=curC2 {
        set p=curC2
        if $random(1000000)>400000 {
          &sql(close c)
          goto lblEachT
        }
      }
    }
    &sql(close c)
  }
  
  write "time=",$zhorolog-time," s.",!
  
  &sql(select count(*) into :count from del.t2)
  write "count=",count,!
}

ClassMethod MyTestDirect()
{
  set time=$zhorolog
  
  kill ^||del.t2D
  
  set id=0
  set p=$random(1000)
  
  for i=1:1:1000000 {
    set j=$random(1000)

lblEachT
    continue:$data(^del.t1I("i1",p))=0
    set q=$query(^del.t1I("i1",p,""))
    kill ^||a
    for k=1:1:20 {
      set ^||a(-$zabs($qsubscript(q,3)-j),$qsubscript(q,4),k)=""
      set q=$query(@q)
    }
    
    set q=$query(^||a(""))
    for k=1:1:10 {
      set curC2=$qsubscript(q,2)

      set id=id+1
      set ^||del.t2D(id)=$listbuild("",p,curC2,j)
      
      if p'=curC2 {
        set p=curC2
        goto:$random(1000000)>400000 lblEachT
      }
      set q=$query(@q)
    }
  }
  set ^||del.t2D=id

  write "time=",$zhorolog-time," s.",!
  
  &sql(select count(*) into :count from del.t2)
  write "count=",count,!
}

}
Результаты:
Код: plaintext
1.
2.
3.
4.
5.
6.
TEST>do ##class(del.t1).MyTest()
time=12.671276 s.
count=1393

TEST>do ##class(del.t1).MyTestDirect()
time=1.167889 s.
count=5636
...
Рейтинг: 0 / 0
25 сообщений из 117, страница 2 из 5
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / какая ДБМС самая "шустрая" для выполнения хранимых процедур?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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