Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5   вперед  Ctrl      все
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
SERG1257
Member

Откуда:
Сообщений: 2934
mikron
Я удивляюсь, сколько здесь людей, которые не умеют читать :)
Вы спрашиваете каким именно микроскопом лучше забивать гвозди. Вам отвечают, что лучше это делать молотком. Вы обижаетесь.
4 ноя 11, 18:29    [11551726]     Ответить | Цитировать Сообщить модератору
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
mikron
Member

Откуда:
Сообщений: 888
SERG1257
mikron
Я удивляюсь, сколько здесь людей, которые не умеют читать :)
Вы спрашиваете каким именно микроскопом лучше забивать гвозди. Вам отвечают, что лучше это делать молотком. Вы обижаетесь.


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

П.С. Тест для АСА может в понедельник накатаю.
4 ноя 11, 18:48    [11551786]     Ответить | Цитировать Сообщить модератору
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
ДохтаР
Member [заблокирован]

Откуда: Новоукраинск
Сообщений: 16864
SERG1257
mikron
Я удивляюсь, сколько здесь людей, которые не умеют читать :)
Вы спрашиваете каким именно микроскопом лучше забивать гвозди. Вам отвечают, что лучше это делать молотком. Вы обижаетесь.



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

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

Я бы тему сформулировал так :
молоток( микроскоп) vs шуруповерт( или другой инструмент, что бы руками не махать)

4 ноя 11, 19:12    [11551848]     Ответить | Цитировать Сообщить модератору
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54850

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

Оракулом. Его ХП быстрее всех выполнит тучу простых запросов типа "select 0 from dual".

Posted via ActualForum NNTP Server 1.4

4 ноя 11, 19:46    [11551949]     Ответить | Цитировать Сообщить модератору
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
Ggg_old
Member

Откуда: Одесса
Сообщений: 1342
mikron, на абстрактный вопрос, где ХП теоретически могут выполнятся быстрее чем у других, я бы посоветовал DB2. Ее ХП компилируются в dll и аттачатся к серваку. Т.е. в теории накладных расходов на интерпретация как-бы меньше. Но у всех приличных серваков давно существует кэш процедур, кэш планов итп вещи, так что не все так однозначно.
И на счет АСА вы не говорили, что вас не интерисуют идеи по поводу ее ускорения. Во всяком случаем реакции на мое предложение поиграться уровнем оптимизации не последовало.
4 ноя 11, 20:41    [11552088]     Ответить | Цитировать Сообщить модератору
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
S.G.
Member

Откуда: cartoon network
Сообщений: 30611
mikron
Возник пока теоретичекий вопрос, а какая ДБМС самая "шустрая"
при обработки последователности многих относително лёгких запросов из процедур.
Чтож, на столь теоретический вопрос, теоретический ответ:

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

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


mikron
Я удивляюсь, сколько здесь людей, которые не умеют читать :)
Для тех, кто читает через слово:
меня не волнуют:
<skip>
меня инересует _сравнение_ ДБМС.
ок, а теперь, оффтоп (дл тех, кто не понимает ответы):
у меня есть легковая машина, она начала слегка перегреваться, оказалось, надо долить охлаждающую жидкость. Я думаю теоретически, может быть не доливать, а купить другую машину, которая будет лучше работать в этих условиях?
5 ноя 11, 13:00    [11552880]     Ответить | Цитировать Сообщить модератору
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
Favn
Member

Откуда:
Сообщений: 585
Ggg_old
я бы посоветовал DB2. Ее ХП компилируются в dll и аттачатся к серваку.
К сожалению, эта информация немного устарела. Лет так на несколько. Если речь о DB2 LUW, конечно - вряд ли тут кого интересуют мейнфреймы :)
В DB2 LUW ХП писанные и на SQL PL, и на PL/SQL компилячатся в один и тот же байт-код, исполняемый сервером. Похоже на Оракл.
Другое дело, что триггеры и функции на спец. подмножестве SQL PL вообще не компилячаться, а inline подставляются в вызвавший запрос и с ним оптимизируются, что м.б. весьма эффективно.
Кроме того, можно писать ХП на нативных и не очень языках (C++, Java, ...). А вот компиляченный C++ уже может выполняться в адресном пространстве сервера, экономя ресурсы.
7 ноя 11, 14:08    [11558050]     Ответить | Цитировать Сообщить модератору
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
Favn
Member

Откуда:
Сообщений: 585
mikron
один вызов процедуры приводик к выполению ~10000 легковесных запросов и ~ 1000 инсертов/делитов из временных таблиц
А вот тут я бы посоветовал DB2 по другой причине - в ХП может применяться "статическая" компиляция запросов (не динамических, конечно) - их синт. анализ, оптимизация и план строятся при первом выполнении (или при компиляции), серьезно экономя время. Перестроить планы можно отдельной командой во время минимальной нагрузки или после серьезного изменения данных.
PS. Такое количество запросов в одной ХП наталкивают на мысль об необходимости использования комплексных CTE вместо этой кучи.
7 ноя 11, 14:15    [11558109]     Ответить | Цитировать Сообщить модератору
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
mikron
Member

Откуда:
Сообщений: 888
Вот попытался изобразить основной паттерн использования для Сайбейс АСА.
Давате мерятся, кто быстрее.
На АСА-12 25 секунд.

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;

7 ноя 11, 15:15    [11558673]     Ответить | Цитировать Сообщить модератору
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
mikron
Member

Откуда:
Сообщений: 888
ДохтаР
Человек спрашивает каким образом быстрее и качественне скрепить 2^N досок.

ещё один писАтель. Где это я спашивал, "каким образом"? Не припомню.
А спрашивал "каким микроскопом/шуруповертом/... (по фантазии читателя) удобней".
А на грабли я сам наступать мастер.
7 ноя 11, 15:55    [11558997]     Ответить | Цитировать Сообщить модератору
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
mikron
Member

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

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

S.G.
у меня есть легковая машина, она начала слегка перегреваться, оказалось, надо долить охлаждающую жидкость. Я думаю теоретически, может быть не доливать, а купить другую машину, которая будет лучше работать в этих условиях?

Для тех, кто в мышинах соображает лутьше чем ИТ>
А может действительно лутше новую? Кто сказал что в охлаждаёшей жидкости дело?
А может масло стало в систему охлаждения гнать? А может я на машине стал прицепы тяжёлые таскать, и всё с полной нагрузкой. А может мне вобще самосвал нужен а не пежо 106.
. Вот и судят некоторые опрометчево, и доливают воды,
а через месяц машина в хлам.
7 ноя 11, 16:17    [11559151]     Ответить | Цитировать Сообщить модератору
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3148
Блог
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,c4values(: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 cursor for select top 10 c2 from del.t1 where c1 :p order by abs(c3 :jdesc for read only)
    &sql(
open c)
    
for  {
      &sql(
fetch into :curC2)
      
quit:SQLCODE
      
      
&sql(insert into del.t2(c1,c2,c3values(: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)):

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().
7 ноя 11, 19:42    [11560351]     Ответить | Цитировать Сообщить модератору
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
Ggg_old
Member

Откуда: Одесса
Сообщений: 1342
у меня на аса 10.0.1 на машинке с одним сата винтом, кор2дуо, 1гб вышло около 35 секунд. Поигрался уровнями оптимизации оптимизатора, сущесвенной разницы не заметил.
count(*)=1452
Есть вопрос по тесту. По сути в цикле выполняется многократно один и тот же запрос:
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 константное!
В таком случае, оно либо закешируется, либо єто будет просто тест кєшпамяти и процессора.
В такой ситуации все равно, насколько интерпретатор хранимок будет быстро их интерпретировать, все упрется в скорость выполнения этого курсора.
7 ноя 11, 20:48    [11560541]     Ответить | Цитировать Сообщить модератору
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3148
Блог
Ggg_old
т.е. условие в поиске where c1 = @p константное!
Разве p и j постоянны?
...
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;
...
7 ноя 11, 22:02    [11560688]     Ответить | Цитировать Сообщить модератору
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
Ggg_old
Member

Откуда: Одесса
Сообщений: 1342
Да, извините, проглядел насчет константности.
Но все равно, основная нагрузка - выполнение селекта, а не мелкие вычисления в цикле. Т.е. не суть принципиально, во что там компилит текст хп движок сервера.
7 ноя 11, 22:06    [11560694]     Ответить | Цитировать Сообщить модератору
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3148
Блог
Ggg_old,

Для чистых вычислений, думаю лучше использовать С++ с задействованием GPU, например с помощью интерфейса CallIn.
PS: Опыт использования GPU для финансового моделирования (C#)
7 ноя 11, 22:30    [11560761]     Ответить | Цитировать Сообщить модератору
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
Ggg_old
Member

Откуда: Одесса
Сообщений: 1342
так то ж не мне нужно, а топикстартеру.
Может ему действительно будет лучше написать хп на жаве, загнать исходную таблицу в какой-нибудь массив или иной контейнер и произвести расчет на низком уровне не прибегая к внутренним select'ам? вон на каше как лихо вышло..
8 ноя 11, 00:24    [11561010]     Ответить | Цитировать Сообщить модератору
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
Ggg_old
Member

Откуда: Одесса
Сообщений: 1342
хе-хе, а дома на SA12 на белом iMac (c2d 2.16ГГц) под макосх 45-50 сек! Сижу вот офигеваю, то ли мак такой тормозной, то ли SA12 тормознее на этом тесте чем десятка. Порою дальше.
8 ноя 11, 00:55    [11561081]     Ответить | Цитировать Сообщить модератору
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
Ggg_old
Member

Откуда: Одесса
Сообщений: 1342
микрон, готовь магарычи :)
разогнал с 50сек до 36. правда заставляет задуматься, что есть некий косячек в реализации, можно продолжить в вашем топике сайбезовой ветки.
8 ноя 11, 02:08    [11561208]     Ответить | Цитировать Сообщить модератору
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
Ggg_old
Member

Откуда: Одесса
Сообщений: 1342
микрон,
профайлер показал, что треть времени в функции тратится на строку
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. Жду отзывы :)
8 ноя 11, 10:40    [11561950]     Ответить | Цитировать Сообщить модератору
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
mikron
Member

Откуда:
Сообщений: 888
Ggg_old
микрон,
профайлер показал, что треть времени в функции тратится на строку
set @j = round(1000 * rand(), 0);
Жду отзывы :)


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

На АСА 11 тест проходит за 31 сек.
Машина примерно одинакового класса.
8 ноя 11, 11:19    [11562228]     Ответить | Цитировать Сообщить модератору
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
Ёш
Member

Откуда:
Сообщений: 2892
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

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();

$ 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 секунд.
8 ноя 11, 12:21    [11562804]     Ответить | Цитировать Сообщить модератору
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
Ёш
Member

Откуда:
Сообщений: 2892
select count(*) перед функцией а не после %) ну ладно...
8 ноя 11, 12:28    [11562854]     Ответить | Цитировать Сообщить модератору
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
Ggg_old
Member

Откуда: Одесса
Сообщений: 1342
микрон, проверил на работе на SA10.
Результат 36 сек с round против 30сек с truncnum()
15-20 прирост на ровном месте.. :) дрючте сайбезовый саппорт..
8 ноя 11, 15:09    [11564117]     Ответить | Цитировать Сообщить модератору
 Re: какая ДБМС самая "шустрая" для выполнения хранимых процедур?  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3148
Блог
Сделал вариант 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,c4values(: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 cursor for select top 10 c2 from del.t1 where c1 :p order by abs(c3 :jdesc for read only)
    &sql(
open c)
    
for  {
      &sql(
fetch into :curC2)
      
quit:SQLCODE
      
      
&sql(insert into del.t2(c1,c2,c3values(: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,!
}

}
Результаты:
TEST>do ##class(del.t1).MyTest()
time=12.671276 s.
count=1393

TEST>do ##class(del.t1).MyTestDirect()
time=1.167889 s.
count=5636
8 ноя 11, 17:13    [11565259]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4 5   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить