Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Не правильно понимаю или ошибка в FAQ oracle on sql.ru  [new]
ILearnCBO
Member

Откуда:
Сообщений: 14
прочел в факе https://www.sql.ru/faq/faq_topic.aspx?fid=344 что



автор

c1 = :bind1 1/NDV ( NDV - Number of Distinct Values)
c1 > :bind1 5%
c1 >= :bind1 5%
c1 like :bind1 25%


На первом примере:
CREATE TABLE t_1 AS SELECT ROWNUM AS ID, object_name FROM all_objects WHERE ROWNUM <=10000
все сходиться

Делаю второй пример
CREATE TABLE t_2 AS SELECT 1 AS ID, object_name FROM all_objects WHERE ROWNUM <=10000

собираю статистику. Проверяю ее : по таблице NUM_ROWS 10000,BLOCKS47,LAST_ANALYZED 11/18/2007.по столбцу NUM_DISTINCT 1,LOW_VALUE 102,HIGH_VALUEC102,DENSITY1,NUM_NULLS 0,NUM_BUCKETS 1, LAST_ANALYZED 11/18/2007

соответственно ожидаю что

с1=:bind - 10000
c1 > :bind -500
c1 >= :bind - 500

получаю

с1=:bind - 10000
c1 > :bind - 10000
c1 >= :bind - 10000

Вопрос. почему ожидаемые результаты отличаються от полученных.
18 ноя 07, 10:13    [4930274]     Ответить | Цитировать Сообщить модератору
 Re: Не правильно понимаю или ошибка в FAQ oracle on sql.ru  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6910
1/NDV - это случаем не минимальное ограничение для других условий?
18 ноя 07, 12:18    [4930377]     Ответить | Цитировать Сообщить модератору
 Re: Не правильно понимаю или ошибка в FAQ oracle on sql.ru  [new]
Я и ёжик
Member

Откуда: СПб
Сообщений: 1815
alex-ls
1/NDV - это случаем не минимальное ограничение для других условий?

+1

Что-то вроде контроля ошибок.
19 ноя 07, 10:41    [4932031]     Ответить | Цитировать Сообщить модератору
 Re: Не правильно понимаю или ошибка в FAQ oracle on sql.ru  [new]
ILearnCBO
Member

Откуда:
Сообщений: 14
автор
Что-то вроде контроля ошибок.

может тогда FAQ поправить? или там это написанно?
19 ноя 07, 10:53    [4932095]     Ответить | Цитировать Сообщить модератору
 Re: Не правильно понимаю или ошибка в FAQ oracle on sql.ru  [new]
McMurfy
Member

Откуда: Киев
Сообщений: 474
Кстати, вот у этого
c1 like :bind1 25%
начиная с 9.2 селективность = 5%, а не 25%.
19 ноя 07, 10:58    [4932125]     Ответить | Цитировать Сообщить модератору
 Re: Не правильно понимаю или ошибка в FAQ oracle on sql.ru  [new]
Я и ёжик
Member

Откуда: СПб
Сообщений: 1815
ILearnCBO
автор
Что-то вроде контроля ошибок.

может тогда FAQ поправить? или там это написанно?

FAQ может поправить только соответствующий админ, да и то скорее новую версию залить.
Но ситуация, мне кажется какая то искусственно-экзотическая, пусть пытливые сами думают, в качестве упражнения :) . Тем более сейчас на большинстве систем bind-peeking не отключен, т.е. селективность таким способом редко считается, это в основном случае не BIND, а всяких функций на столбцах и.т.п.
19 ноя 07, 11:03    [4932160]     Ответить | Цитировать Сообщить модератору
 Re: Не правильно понимаю или ошибка в FAQ oracle on sql.ru  [new]
ILearnCBO
Member

Откуда:
Сообщений: 14
1) проверил. убедился, что он берет max( 5% or 1/NDV)

2)
Я и ёжик
это в основном случае не BIND, а всяких функций на столбцах и.т.п.


сделал WHERE to_number(ID) = 0 кардлинальность считает правильно, но когда поставил
WHERE to_number(ID*2) = 0 то он стал всегда показывать селективность 1%. Когда писал функция(ID) = 0 тоже всегда один процент. имею два вопроса

a) верно ли, что для функции от столбца селективность есть 1%.есть ли это в доке по ораклу.( если есть, то дайте плиз ссылку)

б) почему он понимает to_number(ID) =0, to_char(ID) = 0, но не понимает to_number(ID*2)=0.
19 ноя 07, 22:55    [4936478]     Ответить | Цитировать Сообщить модератору
 Re: Не правильно понимаю или ошибка в FAQ oracle on sql.ru  [new]
ILearnCBO
Member

Откуда:
Сообщений: 14
Нашел презентацию Льюиса

автор

sel(col = X) = density
sel(col between X and Y) @ (y-x)/(high-low)
sel(col > X) = (high - X)/(high - low)
sel(col > :bind1) = hard-coded (5%).
sel(function(col) = X) = hard-coded (1%)
For some (trivial) built-in functions, the selectivity of function(col) is the
same as the selectivity of the column.


интерестно, какие функции оракле считает тривиальными? у него там что стоит

if v_function_name in ('to_char','to_number') and v_Argument = v_Column_name
then
использовать статистику
else вернуть 1.
end if;

в документации не нашел место про селективность по умолчанию.
20 ноя 07, 08:44    [4936929]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить