Начало » Использование СУБД » Firebird, HQbird, InterBase » Непонятное изменение плана
Непонятное изменение плана [сообщение #5915] |
Fri, 21 February 2025 17:38  |
pastor
Сообщений: 92 Зарегистрирован: June 2022 Географическое положение: Калуга
|
Member |
|
|
если в ведущей таблице нет записей, то план получается сильно неоптимальный
все соединения по primary/foreign
основной фильтр - по первой таблице
так было во вьюхе
при наличии записей в ведущей таблице - план для 1 и 2 становится одинаковым.
1. ужас-ужас
Показать скрытый текст
select *
from BILL$RETURNS br -- 1 запись ID = -99, STATE = 80, DATE_CHANGE = '01.01.2000'
join DESK$OPERATIONS o on o.ID_BR = br.ID /* +0 */ -- 2.1 млн записей, 0 пересечений
join BILL$RETURNS_POSITION brp on brp.ID_BR = br.ID -- 0 записей
join BILL$POSITIONS bps on brp.ID_BPS = bps.ID -- 2.1 млн записей
join BILL$PAYMENT_LINKS bpl on bpl.ID_BPS = bps.ID -- 300 тыс записей
where
/*br.ID > 0 and */
br.STATE = 80
/* -- */ and o.STATE = 80
and br.DATE_CHANGE between '20.02.2025' and '22.02.2025'
PLAN JOIN (O NATURAL, BRP INDEX (BILL$RETURNS_POS_BR), BR INDEX (BILL$RETURNS), BPS INDEX (BILL$POSITIONS), BPL INDEX (BILL$PAYMENT_LINK_BPS))
------ Performance info ------
Prepare time = 0ms
Execute time = 1s 968ms
Current memory = 12 174 280
Max memory = 13 457 992
Memory buffers = 512
Reads from disk to cache = 21 546
Writes from cache to disk = 0
Fetches from cache = 8 481 550
Table name Records Total IR NIR UPD DEL INS Backouts Purges Expunges
DESK$OPERATIONS 0 0 2109876 0 0 0 0 0 0
2. вроде норм
Показать скрытый текст
select *
from BILL$RETURNS br -- 1 запись ID = -99, STATE = 80, DATE_CHANGE = '01.01.2000'
join DESK$OPERATIONS o on o.ID_BR = br.ID +0 -- 2.1 млн записей, 0 пересечений
join BILL$RETURNS_POSITION brp on brp.ID_BR = br.ID -- 0 записей
join BILL$POSITIONS bps on brp.ID_BPS = bps.ID -- 2.1 млн записей
join BILL$PAYMENT_LINKS bpl on bpl.ID_BPS = bps.ID -- 300 тыс записей
where
/*br.ID > 0 and */
br.STATE = 80
/* -- */ and o.STATE = 80
and br.DATE_CHANGE between '20.02.2025' and '22.02.2025'
PLAN JOIN (BRP NATURAL, BR INDEX (BILL$RETURNS), BPS INDEX (BILL$POSITIONS), BPL INDEX (BILL$PAYMENT_LINK_BPS), O INDEX (DESK$OPERATIONS_BR))
------ Performance info ------
Prepare time = 0ms
Execute time = 0ms
Current memory = 12 154 800
Max memory = 13 457 992
Memory buffers = 512
Reads from disk to cache = 0
Writes from cache to disk = 0
Fetches from cache = 33
3. тоже норм, но другой
Показать скрытый текст
select *
from BILL$RETURNS br -- 1 запись ID = -99, STATE = 80, DATE_CHANGE = '01.01.2000'
join DESK$OPERATIONS o on o.ID_BR = br.ID /* +0 */ -- 2.1 млн записей, 0 пересечений
join BILL$RETURNS_POSITION brp on brp.ID_BR = br.ID -- 0 записей
join BILL$POSITIONS bps on brp.ID_BPS = bps.ID -- 2.1 млн записей
join BILL$PAYMENT_LINKS bpl on bpl.ID_BPS = bps.ID -- 300 тыс записей
where
br.ID > 0 and
br.STATE = 80
/* -- */ and o.STATE = 80
and br.DATE_CHANGE between '20.02.2025' and '22.02.2025'
PLAN JOIN (O INDEX (DESK$OPERATIONS_BR), BRP INDEX (BILL$RETURNS_POS_BR), BR INDEX (BILL$RETURNS), BPS INDEX (BILL$POSITIONS), BPL INDEX (BILL$PAYMENT_LINK_BPS))
------ Performance info ------
Prepare time = 0ms
Execute time = 0ms
Current memory = 12 222 624
Max memory = 13 457 992
Memory buffers = 512
Reads from disk to cache = 2
Writes from cache to disk = 0
Fetches from cache = 35
[Обновления: Fri, 21 February 2025 17:39] Известить модератора
|
|
|
|
|
|
|
|
Re: Непонятное изменение плана [сообщение #5925 является ответом на сообщение #5923] |
Mon, 24 February 2025 13:52   |
pastor
Сообщений: 92 Зарегистрирован: June 2022 Географическое положение: Калуга
|
Member |
|
|
sim_84 писал(а) Mon, 24 February 2025 13:20Цитата:Да, НИ ОДНОЙ ЗАПИСИ по условию фильтрации нет. в этом и фишка первого вопроса.
Осталось понять а сколько записей в этой таблице вообще без фильтров.
Потому что если без фильтра их там много, то оптимизатор ну никак не сможет догадаться что конкретно для этих значений параметров их там нет.
Напоминаю гистрограмм ещё не завезли.
И да, если там всего одна запись, то после любого фильтра оптимизатор будет считать что их там и осталась одна. Он от нуля перестраховывается
-- 1 запись ID = -99, STATE = 80, DATE_CHANGE = '01.01.2000'
если записей много (на несколько страниц), то как-то догадывается, даже если по условию ничего не попадает
[Обновления: Mon, 24 February 2025 13:59] Известить модератора
|
|
|
|
Re: Непонятное изменение плана [сообщение #5929 является ответом на сообщение #5926] |
Mon, 24 February 2025 15:43  |
pastor
Сообщений: 92 Зарегистрирован: June 2022 Географическое положение: Калуга
|
Member |
|
|
sim_84 писал(а) Mon, 24 February 2025 14:50И всё же для полноты картины индексы для STATE и DATE_CHANGE есть? Простые или составной?
Цитата:для фильтра по BILL$RETURNS есть индекс по DATE_CHANGE
одно поле.
где надо - подхватывается
[Обновления: Mon, 24 February 2025 15:44] Известить модератора
|
|
|
Переход к форуму:
Текущее время: Mon Feb 24 20:16:17 GMT+3 2025
Общее время, затраченное на создание страницы: 0.01160 секунд
|