November 2019

S M T W T F S
      12
34 5 678 9
10111213141516
17181920212223
24252627282930

Style Credit

Expand Cut Tags

No cut tags
Thursday, October 2nd, 2008 11:17 am
Я раньше думал, что Оракл умный. И сам умеет оптимизировать выполнение запросов. А тут наткнулся на ситуацию, когда простейший
SELECT count(*) FROM однатаблица WHERE поле = 'foo' AND дата_добавления >= SYSDATE-30/1440
выполнялся по 15 минут, пока в запрос явным образом не добавили /*+ INDEX_JOIN(BAZ) */

Что я делаю неправильно?
Tags:
Thursday, October 2nd, 2008 12:14 pm (UTC)
Потому что бы правильно оценить стоимость предиката (>= SYSDATE-30/1440) надо иметь глистограммы, а у тебя их спорю на деньги нет. Т.е. статистику то все собирают, а вот какую это вопрос.

select count(*) from user_histograms where tablename = 'ТВОЯТАБЛИЦАИМЯ'

а оракл кстате какой? 10-ка автоматически начала собирать статистику примерно какую надо.
Thursday, October 2nd, 2008 12:20 pm (UTC)
у меня вообще ничего нет, я в данном случае выступаю в роли прикладного программиста.
а dba - индус в худшем смысле этого слова, от него чего-то внятного можно добиться, только рассказав 90% решения :(
Thursday, October 2nd, 2008 12:29 pm (UTC)
ну тогда оракл прав: нужен фулскан.

программер тоже может выполнить типа такого и посмотреть как изменится план.
begin

dbms_stats.gather_table_stats(ownname=>'OPKASSA', tabname=>'DAT_KASSA', estimate_percent=>10, method_opt=>'FOR ALL INDEXED COLUMNS SIZE 250');

end;