Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / index unique scan после удаления статистики / 14 сообщений из 14, страница 1 из 1
22.09.2016, 15:27:23
    #39313522
about_job
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index unique scan после удаления статистики
Здравствуйте!
Помогите, пожалуйста, со следующей проблемой:
1.
Есть таблица t с полями f1(primary key, number),f2(number),f3(varchar2),f4(varchar2),f5,f6,f7.
Имеются отдельные индексы по полям f2,f3,f4.
Количество записей в таблице ~8 млн.
В среднем одна запись таблицы содержит ~1500 символов во всех полях вместе взятых.
2.
Удаляю статистику по таблице t: "exec sys.dbms.delete_table_statistics('myschema','t')",
удаляю статистику по индексам:
"exec sys.dbms.delete_index_statistics('myschema','t_f2_ix2')",
"exec sys.dbms.delete_index_statistics('myschema','t_f3_ix3')",
"exec sys.dbms.delete_index_statistics('myschema','t_f4_ix4')".

3.
Выполняю скрипт:
SELECT *
FROM t
WHERE f2=2 AND f3=3 AND f4=4

4.
В результате в explain plan "INDEX RANGE SCAN", хотя я ожидал увидеть "table full scan". Или я неправильно ожидал?
...
Рейтинг: 0 / 0
22.09.2016, 15:40:12
    #39313541
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index unique scan после удаления статистики
about_jobВ результате в explain plan "INDEX RANGE SCAN", хотя я ожидал увидеть "table full scan". Или я неправильно ожидал?
Ну подумай - зачем оптимизатору полагать создателя БД идиотом?
А раз он не идиот, то значит сделал индексы не зря.
А записей много. Почему бы и не воспользоваться индексом?
...
Рейтинг: 0 / 0
22.09.2016, 15:45:17
    #39313542
AlexFF__|
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index unique scan после удаления статистики
Сергей Арсеньев Ну подумай - зачем оптимизатору полагать создателя БД идиотом?
А раз он не идиот, то значит сделал индексы не зря.
А записей много. Почему бы и не воспользоваться индексом?
Оптимизатор давно уже не меряет категориями есть индекс - нужно использовать .
Он основывается на статистических показателях, которые либо собраны, либо собираются динамически, либо берутся по умолчанию.
Но показатели в любом случае будут и на их основе и генерится план.
...
Рейтинг: 0 / 0
22.09.2016, 15:48:32
    #39313547
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index unique scan после удаления статистики
AlexFF__|Но показатели в любом случае будут и на их основе и генерится план.
Ну первый раз. Статистики нет. Индексы есть. Что ему полагать-то?
Только забитые в него константы на этот случай.
Потом да - начнет подстраиваться.

P.S. TC еще повезло, что ему bitmap conversion не врубли. :)
...
Рейтинг: 0 / 0
22.09.2016, 16:03:14
    #39313575
AlexFF__|
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index unique scan после удаления статистики
Сергей АрсеньевНу первый раз. Статистики нет. Индексы есть. Что ему полагать-то?
Возьмет по умолчанию.
К примеру, если есть статистика по всей таблице, но нет по отдельному столбцу, селективность этого столбца возьмется за 1%.
...
Рейтинг: 0 / 0
22.09.2016, 16:15:45
    #39313585
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index unique scan после удаления статистики
AlexFF__|,

В данном примере нет статистики вообще.
В связи с чем он прикинет во сколько обойдется фуллскан, и во сколько обойдется скан индекса+минимальные накладные расходы на индекс+во сколько обойдется доступ к таблице исходя из средней по земному шару селективности индексов. :)
Но рассматривать план с индексным доступом он будет вне зависимости от наличия статистики (ибо см. выше не идиоты же кругом). :)
...
Рейтинг: 0 / 0
22.09.2016, 16:31:52
    #39313605
AlexFF__|
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index unique scan после удаления статистики
Сергей Арсеньев В данном примере нет статистики вообще
Статистика для генератора планов есть ВСЕГДА.
Вот вообще ВСЕГДА.
Он ее получит из словаря, динамически соберет или рассчитает, но она будет ВСЕГДА.
Создай таблицу, отключи dynamic sampling и посмотри планы запросов к ней.
Estimated Rows + estimated Bytes будут заполнены.

Сергей Арсеньев Но рассматривать план с индексным доступом он будет вне зависимости от наличия статистики (ибо см. выше не идиоты же кругом). :)
Также можешь сам посмотреть.
Сними 10053 и посмотри на основе чего выбираются различные пути доступа.
...
Рейтинг: 0 / 0
22.09.2016, 17:04:18
    #39313641
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index unique scan после удаления статистики
AlexFF__|Также можешь сам посмотреть.
Ты вообще вопрос ТС понял?
Он спросил - почему Oracle рассмотрел вариант с использование индекса?
Мой ответ - потому что индекс есть (ну не идиоты же делали, чтоб априори не рассматривать).
Твоя поправка - потому что статистика есть всегда.
Мы о чем спорим то?
...
Рейтинг: 0 / 0
22.09.2016, 17:16:38
    #39313652
AlexFF__|
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index unique scan после удаления статистики
Сергей Арсеньев,
Вот твой ответ про то, что если индекс есть, то им нужно пользоваться.
Сергей АрсеньевА записей много. Почему бы и не воспользоваться индексом?
Я же пытаюсь втолковать вам обоим, что для генератора планов ничего не поменялось, он по прежнему получает статистические показатели и рассматривает разные пути доступа.
И то, что выбирается индекс, это исключительно заслуга опять таки статистических показателей, которые для данного случая рассчитываются на основе имеющихся данных (размер сегмента таблицы, системные параметры и прочее).
То есть, если что-то поменяется, к примеру те же параметры optimizer_index_*, то может быть выбрать FULL TABLE SCAN.
Понимаешь в чем отличие от твоего Сергей Арсеньевзачем оптимизатору полагать создателя БД идиотом? А раз он не идиот, то значит сделал индексы не зря?
...
Рейтинг: 0 / 0
22.09.2016, 17:23:16
    #39313658
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index unique scan после удаления статистики
AlexFF__|Сергей Арсеньев,
Вот твой ответ про то, что если индекс есть, то им нужно пользоваться.
можно
...
Рейтинг: 0 / 0
22.09.2016, 18:02:27
    #39313680
ODSvfvytcvyt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index unique scan после удаления статистики
...
Рейтинг: 0 / 0
23.09.2016, 20:45:41
    #39314645
about_job
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index unique scan после удаления статистики
отключение dynamic sampling не повлияло на план выполнения
10053 смогу снять теперь только через 2 недели
...
Рейтинг: 0 / 0
23.09.2016, 23:37:51
    #39314692
Makar4ik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index unique scan после удаления статистики
AlexFF__|Сергей Арсеньев В данном примере нет статистики вообще
Статистика для генератора планов есть ВСЕГДА.
Вот вообще ВСЕГДА.
Он ее получит из словаря, динамически соберет или рассчитает, но она будет ВСЕГДА.
Создай таблицу, отключи dynamic sampling и посмотри планы запросов к ней.
Estimated Rows + estimated Bytes будут заполнены.Это хак.
Ну нет статистики. Вынесли её только что. Но нормальный оптимизатор - всё равно здраво рассудит, что раз есть индекс, то лучше воспользоваться им, вместо полного скана.
...
Рейтинг: 0 / 0
24.09.2016, 19:41:55
    #39314957
about_job
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
index unique scan после удаления статистики
Такой же эксперимент проводился на БД с той же самой структурой, с объемом данных того же порядка, но на другом физическом сервере (версия такая же - 11).
И там в плане выполнения предлагался full scan.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / index unique scan после удаления статистики / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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