Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

использование гистограм

640 views
Skip to first unread message

Лебедев Олег

unread,
Sep 27, 2001, 7:53:10 AM9/27/01
to
Добрый день !

В чем разница между гистограмами и просто анализом индексов.
Когда следует использовать то и другое ?

Лебедев Олег.
--
Отправлено через сервер Talk.Ru - http://www.talk.ru

Deev Iliya

unread,
Sep 28, 2001, 5:18:50 AM9/28/01
to
ЛО> Добрый день !
Добрый !
ЛО> В чем разница между гистограмами и просто анализом индексов.
ЛО> Когда следует использовать то и другое ?

В основных концепциях есть глава про оптимизатор. Очень доходчиво
объяснено про оптимизацию по стоимости и по правилам (с использованием
индексов). Чтобы ускорить доступ к данным, учитывая некоторые их
особенности в распределении значений (для этого собирают статистику),
применяют оптимизатор по стоимости, который решает, что лучше - полное сканирование или
использование индекса (индекс-то не всегда выгодно задействовать -
лишние операции чтения). Анализ по стоимости используется реже,
наверное. Если распределение значений в индексируемых данных близко к
нормальному, используется оптимизация по правилам. В утилитах для
разработки прог на PL/SQL как правило есть возможность посмотреть, как будет выглядеть
план запроса в разных случаях.


ЛО> Лебедев Олег.

--
С уважением,
Деев Илья.

Vladimir Demkin

unread,
Sep 28, 2001, 9:33:21 AM9/28/01
to
Я немного поправлю Вас, Илья.
Оптимизатор по правилам Ораклом больше не развивается. Поэтому сейчас он
работает все реже и реже.
Например он не знает о новых в 8 версии типах сегментов (индексированные
таблицы, партиции и т.д.) как только встречается этот тип, вы даже, можете
задать в запросе хинтом использование оптимизатора по правилам - все равно
будет работать стоймостной оптимизатор.
Другое правило, если OPTIMIZER_MODE = CHOOSE, то стоймостной оптимизатор
будет включатьс всякий раз когда хотя-бы у одного сегмента вовлеченного в
операцию собрана статистика.

Гистограма - это некая числовая последовательность, позволяющая увидеть
распределение значений в столбце. Гистограммы следует строить только на тех
столбцах у которых значения распределены неравномерно. Например в столбце
100 строк, мин значение =1, а макс значение = 100, однако из них, например
50 имеют значения между 10 и 20. => Значения полного набора распределены
неравномерно в диапозоне от 1 до 100.
На столбцах с равномерным распределением гистограмы строить просто вредно.
Во первых если гистограмы нет, то Oracle и так предполагает, что значения
распределены равномерно. Отсюда, во вторых => зачем хранить в словаре базы
данных лишнюю информацию? Зачем заставлять Oracle её анализировать, если он
и без того придет в тому же выводу и без нее.
Еще очень важное замечание: гистограмами Oracle пользуется только и только
тогда, если в условии запроса столбец сравнивается с литералом, а не с бинд
переменной. Это очень важно понимать. Гистограмами Oracl пользуется на этапе
построения плана выполнения SQL команды, но на этом этапе, значения
переменных не известны.
Однако вообще даже если Вы не строите гистограмму специально, Oracle
построит ее в любом случае, если Вы просто производите анализ таблицы:)
Однако гистограмма будет состоять всего из двух бакетов (max и min значения
в столбце)

При анализе индексов Oracle собирает информацию о структуре индекса:
количество листовых блоков, его высату, количество уникальных значений и
т.д. - информация так же помогающая оценить эффективность использования
индекса.

--
Vladimir Demkin
http://ux6.dba.ru
http://www.grtcorp.com


"Deev Iliya" <i...@pskoven.elektra.ru> wrote in message
news:9p1fag$cu1$1...@host.talk.ru...

0 new messages