|
|
|
index unique scan после удаления статистики
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Помогите, пожалуйста, со следующей проблемой: 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". Или я неправильно ожидал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2016, 15:27 |
|
||
|
index unique scan после удаления статистики
|
|||
|---|---|---|---|
|
#18+
about_jobВ результате в explain plan "INDEX RANGE SCAN", хотя я ожидал увидеть "table full scan". Или я неправильно ожидал? Ну подумай - зачем оптимизатору полагать создателя БД идиотом? А раз он не идиот, то значит сделал индексы не зря. А записей много. Почему бы и не воспользоваться индексом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2016, 15:40 |
|
||
|
index unique scan после удаления статистики
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев Ну подумай - зачем оптимизатору полагать создателя БД идиотом? А раз он не идиот, то значит сделал индексы не зря. А записей много. Почему бы и не воспользоваться индексом? Оптимизатор давно уже не меряет категориями есть индекс - нужно использовать . Он основывается на статистических показателях, которые либо собраны, либо собираются динамически, либо берутся по умолчанию. Но показатели в любом случае будут и на их основе и генерится план. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2016, 15:45 |
|
||
|
index unique scan после удаления статистики
|
|||
|---|---|---|---|
|
#18+
AlexFF__|Но показатели в любом случае будут и на их основе и генерится план. Ну первый раз. Статистики нет. Индексы есть. Что ему полагать-то? Только забитые в него константы на этот случай. Потом да - начнет подстраиваться. P.S. TC еще повезло, что ему bitmap conversion не врубли. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2016, 15:48 |
|
||
|
index unique scan после удаления статистики
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевНу первый раз. Статистики нет. Индексы есть. Что ему полагать-то? Возьмет по умолчанию. К примеру, если есть статистика по всей таблице, но нет по отдельному столбцу, селективность этого столбца возьмется за 1%. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2016, 16:03 |
|
||
|
index unique scan после удаления статистики
|
|||
|---|---|---|---|
|
#18+
AlexFF__|, В данном примере нет статистики вообще. В связи с чем он прикинет во сколько обойдется фуллскан, и во сколько обойдется скан индекса+минимальные накладные расходы на индекс+во сколько обойдется доступ к таблице исходя из средней по земному шару селективности индексов. :) Но рассматривать план с индексным доступом он будет вне зависимости от наличия статистики (ибо см. выше не идиоты же кругом). :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2016, 16:15 |
|
||
|
index unique scan после удаления статистики
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев В данном примере нет статистики вообще Статистика для генератора планов есть ВСЕГДА. Вот вообще ВСЕГДА. Он ее получит из словаря, динамически соберет или рассчитает, но она будет ВСЕГДА. Создай таблицу, отключи dynamic sampling и посмотри планы запросов к ней. Estimated Rows + estimated Bytes будут заполнены. Сергей Арсеньев Но рассматривать план с индексным доступом он будет вне зависимости от наличия статистики (ибо см. выше не идиоты же кругом). :) Также можешь сам посмотреть. Сними 10053 и посмотри на основе чего выбираются различные пути доступа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2016, 16:31 |
|
||
|
index unique scan после удаления статистики
|
|||
|---|---|---|---|
|
#18+
AlexFF__|Также можешь сам посмотреть. Ты вообще вопрос ТС понял? Он спросил - почему Oracle рассмотрел вариант с использование индекса? Мой ответ - потому что индекс есть (ну не идиоты же делали, чтоб априори не рассматривать). Твоя поправка - потому что статистика есть всегда. Мы о чем спорим то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2016, 17:04 |
|
||
|
index unique scan после удаления статистики
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев, Вот твой ответ про то, что если индекс есть, то им нужно пользоваться. Сергей АрсеньевА записей много. Почему бы и не воспользоваться индексом? Я же пытаюсь втолковать вам обоим, что для генератора планов ничего не поменялось, он по прежнему получает статистические показатели и рассматривает разные пути доступа. И то, что выбирается индекс, это исключительно заслуга опять таки статистических показателей, которые для данного случая рассчитываются на основе имеющихся данных (размер сегмента таблицы, системные параметры и прочее). То есть, если что-то поменяется, к примеру те же параметры optimizer_index_*, то может быть выбрать FULL TABLE SCAN. Понимаешь в чем отличие от твоего Сергей Арсеньевзачем оптимизатору полагать создателя БД идиотом? А раз он не идиот, то значит сделал индексы не зря? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2016, 17:16 |
|
||
|
index unique scan после удаления статистики
|
|||
|---|---|---|---|
|
#18+
AlexFF__|Сергей Арсеньев, Вот твой ответ про то, что если индекс есть, то им нужно пользоваться. можно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2016, 17:23 |
|
||
|
index unique scan после удаления статистики
|
|||
|---|---|---|---|
|
#18+
about_job, https://blogs.oracle.com/optimizer/entry/dynamic_sampling_and_its_impact_on_the_optimizer ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2016, 18:02 |
|
||
|
index unique scan после удаления статистики
|
|||
|---|---|---|---|
|
#18+
отключение dynamic sampling не повлияло на план выполнения 10053 смогу снять теперь только через 2 недели ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2016, 20:45 |
|
||
|
index unique scan после удаления статистики
|
|||
|---|---|---|---|
|
#18+
AlexFF__|Сергей Арсеньев В данном примере нет статистики вообще Статистика для генератора планов есть ВСЕГДА. Вот вообще ВСЕГДА. Он ее получит из словаря, динамически соберет или рассчитает, но она будет ВСЕГДА. Создай таблицу, отключи dynamic sampling и посмотри планы запросов к ней. Estimated Rows + estimated Bytes будут заполнены.Это хак. Ну нет статистики. Вынесли её только что. Но нормальный оптимизатор - всё равно здраво рассудит, что раз есть индекс, то лучше воспользоваться им, вместо полного скана. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2016, 23:37 |
|
||
|
index unique scan после удаления статистики
|
|||
|---|---|---|---|
|
#18+
Такой же эксперимент проводился на БД с той же самой структурой, с объемом данных того же порядка, но на другом физическом сервере (версия такая же - 11). И там в плане выполнения предлагался full scan. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2016, 19:41 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=199&tid=1887393]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
52ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
26ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 328ms |

| 0 / 0 |
