powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / self-joinтаблицы по rdb$db_key (имитация "новой сортировки"): natural-кошмар в статистике
9 сообщений из 9, страница 1 из 1
self-joinтаблицы по rdb$db_key (имитация "новой сортировки"): natural-кошмар в статистике
    #38727739
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi all

Решил тут "революцьонный алгоритм" сортировки воплотить: вытащить из derived-таблицы упорядоченный набор, в котором будут только те графы, что перечислены в order by, и плюс соотв-щие rdb$db_key. И соединить его с этой же таблицей по rdb$db_key (вместо тривиального соединения по ID).

Но не взлетел каменный цветок, совсем не взлетел... :-/

Более того, тут еще и 3.0 неожиданно прокакал старичку 2.5 по скорости...

DDL :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create sequence g; commit;
recreate table t( id int primary key, s varchar(36) ); commit;
insert into t
select i,s from
(
  select gen_id(g,1) i, uuid_to_char(gen_uuid()) s
  from rdb$types a,rdb$types b,(select 1 i from rdb$types rows 20) rows 10000
)
order by rand();
commit;

Query:
Код: plaintext
1.
2.
3.
4.
5.
select count(*) from (
  select x.id,z.s
  from (select id, rdb$db_key k from t a order by id) x
  -- left
  join t z on x.k = z.rdb$db_key
);

Results (показаны данные второго запуска в каждом из 2.5 SC & 3.0 SC; база в обоих случаях имеет page_size 4096):

1. LI-V2.5.3.26790 :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Statement 150:
---------------------------------------------------------------
select count(*) from (
  select x.id,z.s
  from (select id, rdb$db_key k from t a order by id) x
  join t z on x.k = z.rdb$db_key
)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PLAN JOIN (X A ORDER RDB$PRIMARY9, Z NATURAL)
1 records fetched
   49146  ms, 204300015 fetch(es)

Table                             Natural     Index    Update  
***************************************************************
T                               100000000     10000

2. LI-T3.0.0.31288 :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Statement 26:
---------------------------------------------------------
select count(*) from (
  select x.id,z.s
  from (select id, rdb$db_key k from t a order by id) x
  join t z on x.k = z.rdb$db_key
)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Select Expression
    -> Aggregate
        -> Filter
            ->  Nested Loop Join (inner)
                -> Table "T" as "X A" Access By ID
                    -> Index "RDB$PRIMARY2" Full Scan
                -> Table "T" as "Z" Full Scan
1 records fetched
   67697  ms, 204300015 fetch(es)

Table                             Natural     Index    Up
*********************************************************
T                               100000000     10000

Дифферент на корму у 3.0 - около 37%. Многовато как бэ...
Ну, и непонятно, что вообще заставляет его натуралом бегать 100 млн раз присоединении по rdb$db_key, почему нету в плане заветного "Z INDEX ()" ?

PS. Замена (якобы!) соединения на вот это вот:
Код: plaintext
1.
2.
3.
4.
5.
select count(*) from (
  select x.id,(select z.s from t z where z.rdb$db_key = x.k) s
  from (select id, rdb$db_key k from t a order by id) x
  --left
  --join t z on x.k = z.rdb$db_key
)
- приводит к взлёту ракеты в обоих ФБ:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Select Expression
    -> Singularity Check
        -> Filter
            -> Table "T" as "Z" Access By ID
                -> DBKEY
Select Expression
    -> Aggregate
        -> Materialize
            -> Table "T" as "X A" Access By ID
                -> Index "RDB$PRIMARY2" Full Scan
1 records fetched
     31 ms, 50015 fetch(es)

Table                             Natural     Index 
****************************************************
T                                             20000
...
Рейтинг: 0 / 0
self-joinтаблицы по rdb$db_key (имитация "новой сортировки"): natural-кошмар в статистике
    #38728234
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тоже в трекер, поправлю
...
Рейтинг: 0 / 0
self-joinтаблицы по rdb$db_key (имитация "новой сортировки"): natural-кошмар в статистике
    #38728308
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrтоже в трекер, поправлюЯ занёс это в тот же тикет ("Test #2"), мну показалось, что это всё карты из одной колоды.
...
Рейтинг: 0 / 0
self-joinтаблицы по rdb$db_key (имитация "новой сортировки"): natural-кошмар в статистике
    #38728355
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

креститься надо. Переделал в отдельный тикет .
...
Рейтинг: 0 / 0
self-joinтаблицы по rdb$db_key (имитация "новой сортировки"): natural-кошмар в статистике
    #38728811
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr,

снапшоты тройки не собираются под Windows c 13 августа.
...
Рейтинг: 0 / 0
self-joinтаблицы по rdb$db_key (имитация "новой сортировки"): natural-кошмар в статистике
    #38728827
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисснапшоты тройки не собираются под Windows c 13 августа.
Исходники поломаны.
...
Рейтинг: 0 / 0
self-joinтаблицы по rdb$db_key (имитация "новой сортировки"): natural-кошмар в статистике
    #38728833
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

а ты сам собираешь?
...
Рейтинг: 0 / 0
self-joinтаблицы по rdb$db_key (имитация "новой сортировки"): natural-кошмар в статистике
    #38728848
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Дениса ты сам собираешь?
Пробовал пару недель назад, когда ещё собиралось. Потом в исходниках что-то поломалось. Но есть ощущение что эти два очень необычных события могут оказаться совершенно не связаны друг с другом :)
...
Рейтинг: 0 / 0
self-joinтаблицы по rdb$db_key (имитация "новой сортировки"): natural-кошмар в статистике
    #38729387
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeИсходники поломаны.
и починены. Завтра будут снапшоты.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / self-joinтаблицы по rdb$db_key (имитация "новой сортировки"): natural-кошмар в статистике
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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