powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Неоптимальный план в ФБ 3 по сравнению с ФБ 2.5
14 сообщений из 14, страница 1 из 1
Неоптимальный план в ФБ 3 по сравнению с ФБ 2.5
    #39358757
sysdba22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема с таким запросом:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 
  SELECT FIRST(1) 
    doc.id, doc.documentdate
  FROM 
    usr$wg_taxation card
      JOIN gd_document doc ON doc.id = card.documentkey
  WHERE 
    card.usr$emplkey = :emplkey 
    AND
    doc.documentdate <= :begindate
  ORDER BY 
    doc.documentdate DESC



В таблице usr$wg_taxation 1 запись, в таблице gd_document -- 7.5 млн.

В ФБ 2.5 время выполнения моментальное, менее 1 мс.

План запроса:

Код: plsql
1.
PLAN SORT (JOIN (CARD INDEX (USR$FKWG_TAXATION951), DOC INDEX (RDB$PRIMARY112)))



В ФБ 3.0.2 время выполнения 13 516 мс.

План запроса:

Код: plsql
1.
PLAN JOIN (DOC ORDER GD_X_DOCUMENT_DOCUMENTDATE, CARD INDEX (RDB$PRIMARY502))



Как видно. проблема в чтении ВСЕЙ таблицы GD_DOCUMENT. Статистика:
...
Рейтинг: 0 / 0
Неоптимальный план в ФБ 3 по сравнению с ФБ 2.5
    #39358786
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysdba22,

Код: sql
1.
2.
ORDER BY
  doc.documentdate+0 DESC



поможет
...
Рейтинг: 0 / 0
Неоптимальный план в ФБ 3 по сравнению с ФБ 2.5
    #39358819
sysdba22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В частном случае да.

Но, на это напоремся не только мы. Тут надо бы вернуть оптимизатор как раньше.
...
Рейтинг: 0 / 0
Неоптимальный план в ФБ 3 по сравнению с ФБ 2.5
    #39358833
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysdba22,

тут палка о двух концах. Вернёшь как раньше в другом месте станет хуже или даже просто при другом распределении. Ну и сведений не достаточно. Где DDL индексов, где их селективность?

Кстати без FIRST план скорее всего будет как в 2.5. Жди когда dimitr сюда заглянет
...
Рейтинг: 0 / 0
Неоптимальный план в ФБ 3 по сравнению с ФБ 2.5
    #39358839
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysdba22usr$wg_taxation 1 запись, в таблице gd_document -- 7.5 млн.

DOC INDEX (RDB$PRIMARY112)

Меня одного смущает эта связь по первичному ключу 7,5 миллионов записей с одной?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Неоптимальный план в ФБ 3 по сравнению с ФБ 2.5
    #39358850
sysdba22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис Где DDL индексов, где их селективность?

Код: plsql
1.
2.
3.
4.
PLAN JOIN (DOC ORDER GD_X_DOCUMENT_DOCUMENTDATE, CARD INDEX (RDB$PRIMARY502))

CREATE DESC INDEX gd_x_document_documentdate
  ON gd_document(documentdate);



Статистика индекса RDB$PRIMARY502 -- 1. Это первичный ключ по таблице usr$wg_taxation.

Сейчас в ней одна запись, но в процессе эксплутации системы может быть и не одна. Но в любом случае тут записей будет в миллионы-сотни тысяч раз меньше чем в GD_DOCUMENT.

Статистика индекса первичного ключа таблицы GD_DOCUMENT -- 1.3158557976567E-7
...
Рейтинг: 0 / 0
Неоптимальный план в ФБ 3 по сравнению с ФБ 2.5
    #39358882
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovМеня одного смущает эта связь по первичному ключу 7,5 миллионов записей с одной?..
Не, я тоже это заметил. Всегда стараюсь делать условия к большой таблице, а джойнить к ней малые. Если это возможно логически, конечно.
...
Рейтинг: 0 / 0
Неоптимальный план в ФБ 3 по сравнению с ФБ 2.5
    #39358899
sysdba22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Меня одного смущает эта связь по первичному ключу 7,5 миллионов записей с одной?..


Ни теория реляционных БД, ни стандарт SQL не запрещают JOIN таблицы с малым количеством записей (и даже одной) с таблицей с большим количеством записей ))
...
Рейтинг: 0 / 0
Неоптимальный план в ФБ 3 по сравнению с ФБ 2.5
    #39358919
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но здравый смысл должен бунтовать при применении ORDER BY к выборке в которой всего одна
запись. Первичный ключ же не позволит иметь больше.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Неоптимальный план в ФБ 3 по сравнению с ФБ 2.5
    #39359132
sysdba22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да не одна там. Это в частном случае. А так может быть и 10 и 100. В любом случае много меньше, чем в gd_document.
...
Рейтинг: 0 / 0
Неоптимальный план в ФБ 3 по сравнению с ФБ 2.5
    #39359278
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysdba22,

попутные вопросы - RDB$PRIMARY502 - т.е. база была создана при царе Горохе?
Индекс - gd_x_document_documentdate - какая у него статистика?
как давно пересчитывалась статистика по индексам?

Еще лучше - посмотреть Explain plan для этого запроса в isql.
...
Рейтинг: 0 / 0
Неоптимальный план в ФБ 3 по сравнению с ФБ 2.5
    #39359330
Romanzek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо, патч соответствующий не попал в эту сборку. Это чинилось точно. Даже было два варианта починки.
Дмитрий, наверное, пояснит.
...
Рейтинг: 0 / 0
Неоптимальный план в ФБ 3 по сравнению с ФБ 2.5
    #39359637
sysdba22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvsysdba22,

попутные вопросы - RDB$PRIMARY502 - т.е. база была создана при царе Горохе?
Индекс - gd_x_document_documentdate - какая у него статистика?
как давно пересчитывалась статистика по индексам?

Еще лучше - посмотреть Explain plan для этого запроса в isql.

База старая. Не знаю что в этом плохого. Для экспериментов из одного бэкапа
были восстановлены две базы, одна под 2.5, вторая под 3.0. Т.е. все статистики
индексов свежайшие.

Для GD_X_DOCUMENT_DOCUMENTDATE статистика 0.00020177561964374.

Расширенный план:

Select Expression
-> First N Records
-> Nested Loop Join (inner)
-> Filter
-> Table "GD_DOCUMENT" as "DOC" Access By ID
-> Index "GD_X_DOCUMENT_DOCUMENTDATE" Range Scan (lower bound: 1/1)
-> Filter
-> Table "USR$WG_TAXATION" as "CARD" Access By ID
-> Bitmap
-> Index "RDB$PRIMARY502" Unique Scan
...
Рейтинг: 0 / 0
Неоптимальный план в ФБ 3 по сравнению с ФБ 2.5
    #39359639
sysdba22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Select Expression
    -> First N Records
        -> Nested Loop Join (inner)
            -> Filter
                -> Table "GD_DOCUMENT" as "DOC" Access By ID
                    -> Index "GD_X_DOCUMENT_DOCUMENTDATE" Range Scan (lower bound: 1/1)
            -> Filter
                -> Table "USR$WG_TAXATION" as "CARD" Access By ID
                    -> Bitmap
                        -> Index "RDB$PRIMARY502" Unique Scan
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Неоптимальный план в ФБ 3 по сравнению с ФБ 2.5
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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