Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 Непонятный выбор оптимизатора  [new]
Dimitry Sibiryakov
Member

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

Дано: Firebird 2.5.9 с базой в которой туева хуча ключей.
Запрос:
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;

План:
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)))

Статистика:
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

2 июл 20, 19:20    [22161151]     Ответить | Цитировать Сообщить модератору
 Re: Непонятный выбор оптимизатора  [new]
dimitr
Member

Откуда: PNZ
Сообщений: 6917
Потому что 2.5? :-) Статистка системных индексов свежая?
2 июл 20, 19:25    [22161153]     Ответить | Цитировать Сообщить модератору
 Re: Непонятный выбор оптимизатора  [new]
Dimitry Sibiryakov
Member

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

dimitr
Статистка системных индексов свежая?

Только что пересчитал, должна быть свежая.

Posted via ActualForum NNTP Server 1.5

2 июл 20, 19:29    [22161155]     Ответить | Цитировать Сообщить модератору
 Re: Непонятный выбор оптимизатора  [new]
Dimitry Sibiryakov
Member

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

Если перекинуть условие имени таблицы с pkey на fkey, то он всё равно стоит первым, но уже
использует индекс, запрос в два раза быстрее.

PS: Глупый Power BI посылает этот запрос для каждой таблицы не по разу, каждый в отдельном
коннекте. Неудивительно, что он тормозит как последний слоупок.

Posted via ActualForum NNTP Server 1.5

2 июл 20, 19:41    [22161157]     Ответить | Цитировать Сообщить модератору
 Re: Непонятный выбор оптимизатора  [new]
Dimitry Sibiryakov
Member

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

Как известно, у сортировки Хоара худший случай это когда входной поток уже отсортирован по
требуемому ключу. У оптимизатора Firebird достаточно сообразительности отследить этот
случай и не делать лишнюю работу?

Posted via ActualForum NNTP Server 1.5

6 июл 20, 17:55    [22162916]     Ответить | Цитировать Сообщить модератору
 Re: Непонятный выбор оптимизатора  [new]
dimitr
Member

Откуда: PNZ
Сообщений: 6917
Dimitry Sibiryakov,

когда может это понять - не делает лишнюю сортировку. Но может не всегда.
7 июл 20, 07:40    [22163143]     Ответить | Цитировать Сообщить модератору
 Re: Непонятный выбор оптимизатора  [new]
Dimitry Sibiryakov
Member

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

А как идёт выбор порядка полей сортировки для группировки/union/distinct? Способен он
продвинуть туда порядок конечного order by?

Posted via ActualForum NNTP Server 1.5

7 июл 20, 12:12    [22163300]     Ответить | Цитировать Сообщить модератору
 Re: Непонятный выбор оптимизатора  [new]
dimitr
Member

Откуда: PNZ
Сообщений: 6917
для DISTINCT вроде может. А вот для группировки судя по коду - почему-то фигвам. Но не помешает проверить.
7 июл 20, 20:19    [22163666]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить