Начало » Использование СУБД » Firebird, HQbird, InterBase » Непонятное изменение плана
Непонятное изменение плана [сообщение #5915] |
Fri, 21 February 2025 17:38 |
pastor
Сообщений: 88 Зарегистрирован: 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] Известить модератора
|
|
|
Переход к форуму:
Текущее время: Sat Feb 22 18:28:27 GMT+3 2025
Общее время, затраченное на создание страницы: 0.00655 секунд
|