powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / 2 Дед Маздай. Приглашение на тест
6 сообщений из 31, страница 2 из 2
2 Дед Маздай. Приглашение на тест
    #32039073
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно и дальше пооптимизировать. Практически всегда 0ms и оценочная стоимость плана меньше 2-х предыдущих вариантов:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
set nocount on
declare @t table  (i int)
insert @t
 select  0 
 union select  1 
 union select  2 
 union select  3 
 union select  4 
 union select  5 
 union select  6 
 union select  7 
 union select  8 
 union select  9 
declare @d datetime
declare @cnt int
select @d = getdate()
select @cnt= 2 *sum(cou*cou) from
(select sum( 1 ) cou
 from (select t1.i + t2.i + t3.i i 
       from @t t1, @t t2, @t t3
       where t1.i + t2.i + t3.i< 14 ) l1
 group by i) l2
select @cnt As kolvo,datediff(ms, @d, getdate())
...
Рейтинг: 0 / 0
2 Дед Маздай. Приглашение на тест
    #32039088
Фотография Chicago
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если то же самое на OpenSQL для SAP R/3 переписать,
то результат будет

26000ms для варианта SergSuper

Код: 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.
67.
68.
69.
70.
71.
72.
73.
74.
75.
REPORT Z_SUN_TEST .

data: l_before type sy-uzeit,
      l_after type sy-uzeit,
      l_count( 5 ) type n,
      l_v1 type zzsun-zzval,
      l_v2 type zzsun-zzval,
      l_v3 type zzsun-zzval,
      l_v4 type zzsun-zzval,
      l_v5 type zzsun-zzval,
      l_v6 type zzsun-zzval,
      l_left( 2 ) type n,
      l_right( 2 ) type n,
      l_duration like sy-tabix.

get time.
l_before = sy-uzeit.

select
  t1~zzval
  t2~zzval
  t3~zzval
  t4~zzval
  t5~zzval
  t6~zzval
into
  (l_v1,
  l_v2,
  l_v3,
  l_v4,
  l_v5,
  l_v6)
from
  zzsun as t1
join
  zzsun as t2
on
  t1~zzcomp = t2~zzcomp
join
  zzsun as t3
on
  t1~zzcomp = t3~zzcomp
join
  zzsun as t4
on
  t1~zzcomp = t4~zzcomp
join
  zzsun as t5
on
  t1~zzcomp = t5~zzcomp
join
  zzsun as t6
on
  t1~zzcomp = t6~zzcomp.

  l_left  = l_v1 + l_v2 + l_v3.
  l_right = l_v4 + l_v5 + l_v6.

  if l_left = l_right.
    add  1  to l_count.
  endif.
endselect.

get time.
l_after = sy-uzeit.

CALL FUNCTION 'SWI_DURATION_DETERMINE'
EXPORTING
  START_DATE = sy-datum
  END_DATE = sy-datum
  START_TIME = l_before
  END_TIME = l_after
IMPORTING
  DURATION = l_duration.

write: l_before, / l_after, / l_duration, / l_count.



1000ms для варианта Кубенко

Код: 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.
67.
68.
69.
70.
71.
72.
*& ---------------------------------------------------------------------*
 
*& Report  Z_SUN_TEST2                                                 *
*&                                                                     *
*& ---------------------------------------------------------------------*
 
*&                                                                     *
*&                                                                     *
*& ---------------------------------------------------------------------*
 

REPORT  Z_SUN_TEST2                   .

data: l_before type sy-uzeit,
      l_after type sy-uzeit,
      l_count( 5 ) type n,
      l_total( 5 ) type n,
      l_v1 type zzsun-zzval,
      l_v2 type zzsun-zzval,
      l_v3 type zzsun-zzval,
      l_right( 2 ) type n,
      l_duration like sy-tabix,
      l_i( 2 ) type n.

get time.
l_before = sy-uzeit.

while l_i <  28 .
  clear l_count.
  
  select
    t1~zzval
    t2~zzval
    t3~zzval
  into
    (l_v1,
    l_v2,
    l_v3)
  from
    zzsun as t1
  join
    zzsun as t2
  on
    t1~zzcomp = t2~zzcomp
  join
    zzsun as t3
  on
    t1~zzcomp = t3~zzcomp.
  
    l_right  = l_v1 + l_v2 + l_v3.
  
    if l_i = l_right.
      add  1  to l_count.
    endif.
  endselect.
  
  l_total = l_total + l_count **  2 .
  add  1  to l_i.
endwhile.

get time.
l_after = sy-uzeit.

CALL FUNCTION 'SWI_DURATION_DETERMINE'
EXPORTING
  START_DATE = sy-datum
  END_DATE = sy-datum
  START_TIME = l_before
  END_TIME = l_after
IMPORTING
  DURATION = l_duration.

write: l_before, / l_after, / l_duration, / l_total.


Вот такой я извращенец!!!
...
Рейтинг: 0 / 0
2 Дед Маздай. Приглашение на тест
    #32039107
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то Dankov
ну правильно ... оптимизация... она и в африке оптимизация... ;))
...
Рейтинг: 0 / 0
2 Дед Маздай. Приглашение на тест
    #32039110
2 SergSuper
Я не пойму что вас не устраивает в предложенных алгоритмах. Дед Маздай в форуме по сравнению СУБД пригласил всех на тест по сравнению производительности различных СУБД. Вами был предложен красивый вариант с декартовым произведением (о котором мне вряд ли бы пришла в голову мысль), но он оказался не самым оптимальным, как впрочем и то что предложил я. Зато каких результатов добились Dankov и Mice!
А по поводу столбика я что-то не пойму к чему вы это? По поводу полного перебора? Ну плохой вариант не спорю, просто я хотел проверить чистый перебор для последних трех разрядов, а затем посчитать сумму квадратов на транзакте это получилось медленно, но на сях это в любом случае было бы быстрее любого варианта написанного на транзакте. А выложил этот вариант по полному перебору потому что обидно что нет массивов в T-SQL, а работа с таблицами (обновление) дико тормозная.
...
Рейтинг: 0 / 0
2 Дед Маздай. Приглашение на тест
    #32039185
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Алексей Кубенко
Меня всё устраивает, просто тест был для сервера, а не на Вашу сообразительность :)
Наоборот хотелось написать такого, чтоб он побольше задумался.
...
Рейтинг: 0 / 0
2 Дед Маздай. Приглашение на тест
    #32039268
Фотография Дед Маздай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Дед Маздай в форуме по сравнению СУБД пригласил всех на тест по сравнению производительности различных СУБД. Вами был предложен красивый вариант с декартовым произведением (о котором мне вряд ли бы пришла в голову мысль), но он оказался не самым оптимальным..."
Странно. Разве я говорил что-нибудь про оптимизацию запроса? По-моему, как раз наоборот: "ТРС-С - типисями, а этот простой тест под силу проверить каждому. Просто взять и выполнить, как есть, без какой бы то ни было предварительной заточки и оптимизации."
Очень хорошо, что в ходе дискуссии родились действительно красивые конструкции, но SergSuper прав: в данном случае этого не требовалось. Требовался просто голый результат as is. Спасибо.
...
Рейтинг: 0 / 0
6 сообщений из 31, страница 2 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / 2 Дед Маздай. Приглашение на тест
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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