powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Непонятный выбор оптимизатора
8 сообщений из 8, страница 1 из 1
Непонятный выбор оптимизатора
    #39975619
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дано: Firebird 2.5.9 с базой в которой туева хуча ключей.
Запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
select cast (pkey.rdb$relation_name as varchar(31)) as pktable_name,
cast (pseg.rdb$field_name as varchar(31)) as pkcolumn_name,
  cast (fkey.rdb$relation_name as varchar(31)) as fktable_name,
  cast (fseg.rdb$field_name as varchar(31)) as fkcolumn_name,
  cast (pseg.rdb$field_position+1 as smallint) as key_seq,
  cast (fkey.rdb$constraint_name as varchar(31)) as fk_name,
  cast (refc.rdb$const_name_uq as varchar(31)) as pk_name,
  pkey.rdb$constraint_type
from rdb$relation_constraints fkey
  join rdb$ref_constraints refc on fkey.rdb$constraint_name = refc.rdb$constraint_name
  join rdb$relation_constraints pkey on refc.rdb$const_name_uq = pkey.rdb$constraint_name
  join rdb$indices fidx on fkey.rdb$index_name = fidx.rdb$index_name
  join rdb$indices pidx on pkey.rdb$index_name = pidx.rdb$index_name
  join rdb$index_segments fseg on fidx.rdb$index_name = fseg.rdb$index_name
  join rdb$index_segments pseg on pidx.rdb$index_name = pseg.rdb$index_name
   and pseg.rdb$field_position = fseg.rdb$field_position
where
   pkey.rdb$relation_name = 'TCASSOCIES'
   and pkey.rdb$constraint_type = 'PRIMARY KEY'
   and fkey.rdb$constraint_type = 'FOREIGN KEY'
--  and fkey.rdb$relation_name = 'TCASSOCIES'
order by pkey.rdb$relation_name, fkey.rdb$relation_name, pseg.rdb$field_position;


План:
Код: sql
1.
2.
3.
PLAN SORT (JOIN (FKEY NATURAL, REFC INDEX (RDB$INDEX_13), FIDX INDEX (RDB$INDEX_5), 
PKEY INDEX (RDB$INDEX_12), PIDX INDEX (RDB$INDEX_5), FSEG INDEX (RDB$INDEX_6), PSEG INDEX 
(RDB$INDEX_6)))


Статистика:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
Current memory = 14298640
Delta memory = 1176
Max memory = 14781088
Elapsed time= 0.50 sec
Buffers = 3000
Reads = 0
Writes 0
Fetches = 14788


Почему первой таблицей не идёт pkey с индексом relation_name, constraint_type?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Непонятный выбор оптимизатора
    #39975621
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что 2.5? :-) Статистка системных индексов свежая?
...
Рейтинг: 0 / 0
Непонятный выбор оптимизатора
    #39975623
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrСтатистка системных индексов свежая?

Только что пересчитал, должна быть свежая.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Непонятный выбор оптимизатора
    #39975624
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если перекинуть условие имени таблицы с pkey на fkey, то он всё равно стоит первым, но уже
использует индекс, запрос в два раза быстрее.

PS: Глупый Power BI посылает этот запрос для каждой таблицы не по разу, каждый в отдельном
коннекте. Неудивительно, что он тормозит как последний слоупок.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Непонятный выбор оптимизатора
    #39976760
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как известно, у сортировки Хоара худший случай это когда входной поток уже отсортирован по
требуемому ключу. У оптимизатора Firebird достаточно сообразительности отследить этот
случай и не делать лишнюю работу?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Непонятный выбор оптимизатора
    #39976921
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

когда может это понять - не делает лишнюю сортировку. Но может не всегда.
...
Рейтинг: 0 / 0
Непонятный выбор оптимизатора
    #39977023
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как идёт выбор порядка полей сортировки для группировки/union/distinct? Способен он
продвинуть туда порядок конечного order by?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Непонятный выбор оптимизатора
    #39977219
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для DISTINCT вроде может. А вот для группировки судя по коду - почему-то фигвам. Но не помешает проверить.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Непонятный выбор оптимизатора
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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