powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Обновление индексной статистики
14 сообщений из 14, страница 1 из 1
Обновление индексной статистики
    #39695961
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В старых версиях FB (2.0, 2.1) насколько я знаю, нет автоматического обновления индексной статистики (во всяком случае у меня такое мнение сложилось). Из-за этого очень часто FB принимает неправильные решения по использованию индексов. Приходится очень часто в коде использовать приёмы "ORDER BY ID+0" либо уточнять план запроса после WHERE. Также из-за этого я не использую JOIN. Только LEFT JOIN.
Подскажите, в последних версиях FB (3.x, 4.x) ситуация такая-же или разработчики FB что-нибудь улучшили?
...
Рейтинг: 0 / 0
Обновление индексной статистики
    #39695991
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
статистика в трешке задействуется более интеллектуально, но пересчитывать ее время от времени все также ручками нужно.
...
Рейтинг: 0 / 0
Обновление индексной статистики
    #39695998
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer,

автоматическое обновление статистики планируется сделать в 4.0.
Но оптимизатор в 2.5 и 3.0 менялся, причём в некоторых местах существенно.

DmSerТакже из-за этого я не использую JOIN. Только LEFT JOIN.
А вот это зря.

Явные планы лучше не писать вообще никогда. +0 наше всё.
...
Рейтинг: 0 / 0
Обновление индексной статистики
    #39696269
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисЯвные планы лучше не писать вообще никогда. +0 наше всё.

Пару раз натыкался на случаи, когда индексы-то используются нужные, а вот порядок перебора таблиц всё-таки нежелательный. Но для вас это, возможно, было давно и неправда, на полуторке.
...
Рейтинг: 0 / 0
Обновление индексной статистики
    #39696297
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишка,

я это говорю с учётом апгрейда на будущие версии. План который нормально кушался на полуторке на 3.0 может давать ошибку. Хинты хотя бы не создают несовместимостей.
...
Рейтинг: 0 / 0
Обновление индексной статистики
    #39696298
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисЯвные планы лучше не писать вообще никогда. +0 наше всё.

Вы это по поводу LEFT JOIN? К сожалению, в случае FB, я пришёл к такому варианту в результате собственного опыта, когда при обычном JOIN невозможно предсказать, в каком порядке будет производиться обход таблиц. Во многих случаях указание LEFT JOIN позволило решить проблемы производительности.

Если Вы по поводу явного указания плана запроса "PLAN", то иногда возникают ситуации, когда +0 не помогает. Например есть индекс на поле TIME и есть второй индекс на поля USER_ID, TIME, у обоих индексов одинаковая статистика (конкретно я разбирался - было значение "0"). В итоге при запросе
WHERE USER_ID=:id AND TIME BETWEEN :t1 AND :t2
СУБД (FB 2.0.7) решает, что нужно использовать первый индекс (а это замедление в сотни раз). С помощью "+0" такое не обойти.
...
Рейтинг: 0 / 0
Обновление индексной статистики
    #39696304
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer,

видишь ли. План это такая гадость которую начиная с 2.0 всегда надо писать целиком.
Как только запрос чуть сложнее чем джойн из двух таблиц, написание плана становится занятием не тривиальным, а подчас и не возможным. Попробуй растолкуй оптимизатору рекурсивный запрос например.

DmSerНапример есть индекс на поле TIME и есть второй индекс на поля USER_ID, TIME, у обоих индексов одинаковая статистика (конкретно я разбирался - было значение "0"). В итоге при запросе
WHERE USER_ID=:id AND TIME BETWEEN :t1 AND :t2
СУБД (FB 2.0.7) решает, что нужно использовать первый индекс (а это замедление в сотни раз). С помощью "+0" такое не обойти.

ну на 2.5 и 3.0 я с таким не сталкивался. Вы точно статистику пересчитывали?
...
Рейтинг: 0 / 0
Обновление индексной статистики
    #39696306
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer, когда при обычном JOIN невозможно предсказать, в каком порядке будет производиться обход таблиц. Во многих случаях указание LEFT JOIN позволило решить проблемы производительности.

и не надо предсказывать. оптимизатор ФБ нормально по кардинальности определяет порядок объединения таблиц.
А если его принуждать явным left join, то если таблицы по данным перекосит, то потом будет с производительностью только хуже.
...
Рейтинг: 0 / 0
Обновление индексной статистики
    #39696318
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
31.08.2018 15:32, Симонов Денис пишет:
> План который нормально кушался на полуторке на 3.0 может давать ошибку.

подтверждаю.

> Хинты хотя бы не создают несовместимостей.

это не хинты.
это попытка нае... (нагнуть) оптимизатор стуча ему линейкой по пальцам.
оптимизатор начинает пальцы отдёргивать и не всегда в той последовательности
в какой хотелось бы наставнику с линейкой.

тикет был про ораклячьи хинты, но у-вы.
хватило бы одного /*+ ORDERED */
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обновление индексной статистики
    #39696319
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
31.08.2018 15:44, kdv пишет:
> оптимизатор ФБ нормально по кардинальности определяет порядок объединения таблиц.

вот не надо песен.
и Оракл не всегда оптимальный порядок выбирает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Обновление индексной статистики
    #39700691
Dmitry Kurbsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerНапример есть индекс на поле TIME и есть второй индекс на поля USER_ID, TIME, у обоих индексов одинаковая статистика (конкретно я разбирался - было значение "0"). В итоге при запросе
WHERE USER_ID=:id AND TIME BETWEEN :t1 AND :t2
СУБД (FB 2.0.7) решает, что нужно использовать первый индекс (а это замедление в сотни раз). С помощью "+0" такое не обойти.
Почему не обойти? Разве не поможет
WHERE USER_ID +0 =:id AND TIME BETWEEN :t1 AND :t2
...
Рейтинг: 0 / 0
Обновление индексной статистики
    #39700694
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerВы это по поводу LEFT JOIN? К сожалению, в случае FB, я пришёл к такому варианту в результате собственного опыта, когда при обычном JOIN невозможно предсказать, в каком порядке будет производиться обход таблиц. Во многих случаях указание LEFT JOIN позволило решить проблемы производительности.
Возможно, ты натолкнулся на баг, связанный с
TABLE
LEFT JOIN TABLE2
INNER JOIN TABLE3.

В моей практике в 99,9% случаев FB строит оптимальный план и отказываться ради 0,1% случаев от нормального написания запросов - перебор. Тормозящие запросы - видно сразу, а там уже подкрутить через LEFT JOIN или +0 не составляет проблемы.
...
Рейтинг: 0 / 0
Обновление индексной статистики
    #39702058
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMaxВозможно, ты натолкнулся на баг, связанный с
TABLE
LEFT JOIN TABLE2
INNER JOIN TABLE3.

В моей практике в 99,9% случаев FB строит оптимальный план и отказываться ради 0,1% случаев от нормального написания запросов - перебор. Тормозящие запросы - видно сразу, а там уже подкрутить через LEFT JOIN или +0 не составляет проблемы.

Нет, я не использую явный JOIN. Я указывал, что у обоих индексов статистика была = 0, в этом случае FB решал, что нужно брать индекс, который по одному полю, вместо индекса по двум полям (на самом деле 3 поля, но не думаю, что это принципиально). После пересчёта статистики всё заработало нормально, тут вопросов нет.
...
Рейтинг: 0 / 0
Обновление индексной статистики
    #39702062
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerНет, я не использую явный JOIN
Имелось ввиду другое, но Вы поняли... :)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Обновление индексной статистики
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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