Вторая попытка отправить читаемый ответ :)

Horsun Vlad пишет:

 >     Ну, это же явный маразм.

Про маразм - это сгоряча. IMHO маразм - это использование единого плана
для всех возможных значений параметров.(И понятие "плохой индекс" мне
тоже кажется достаточно маразматичным).
Упрощенный, но жизненный пример - отбор документов, скажем по периоду,
складу и статусу. Есть индекс по дате, FK по складу, индекс по статусу.
Дата более-менее равномерна, склады заметно отличаются объемом потока
документов, а распределение по статусу вообще супер перекошенное - 99%
закрыты и очень небольшое кол-во "в обработке". Какой индекс оптимальнее
будет?

 > Берём процедуру типа
...
 > ты хочешь сказать, что каждое выполнение внутреннего select'а
 > будет оптимизтроваться заново ?

Для процедур, функций и триггеров сделано "интеллектуальное" кэширование
планов:
http://www.ianywhere.com/developer/product_manuals/sqlanywhere/0902/en/html/dbugen9/00000403.htm
Вкраце смысл: после нескольких выполнений оператора строится reusable
план. Он не зависит от значений переменных. Если стоимость такого плана
близка к лучшей зафиксированной стоимости запроса, то план добавляется в
кэш и используется в дальнейшем. В противном случае затраты на
оптимизацию на каждом исполнении перевешиваются выгодами от оптимизации
и принимается решение не кэшировать, а оптимизировать каждый раз.
Запросы с сохраненными в кэше планами периодически переоптимизируются
для проверки относительной эффективности сохраненного плана.

 > Нафиг-нафиг такой 'оптимизатор'

Никто ж не заставляет :) Просто упомянул к сведению.

P.S. Гистограммы в FB планируются? В roadmap упоминается со средним
приоритетом  Optimizer improvements ... more data statistics


--~--~---------~--~----~------------~-------~--~----~
-~----------~----~----~----~------~----~------~--~---

Ответить