Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
Администрирование Oracle Database:
- Установка и настройка базы данных
- Обновление, применение патчей
- Оптимизация, настройка производительности
- Обучение, подготовка персонала, оптимизация

ТЕМА:

Re: Oracle: Вопрос с индексом 12 года 8 мес. назад #3157

"это каким образом? DBMS_STATS.GET_COLUMN_STATS?"

Так Вы получите статистику по столбцу. Чтобы собрать статистику, посмотрите на method_opt (dbms_stats.gather_table_stats).

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Вопрос с индексом 12 года 8 мес. назад #3158

  • Todd
  • Todd аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Спасибо получено: 0
Gleb, так?

exec dbms_stats.gather_table_stats(user,'BIG',method_opt=>'FOR ALL COLUMNS SIZE SKEWONLY',cascade=>true);

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Вопрос с индексом 12 года 8 мес. назад #3159

стоимость использования индекса превышает стоимость полного сканирования. поэтому индекс и не используется. вот вырастет табличка побольше, тогда может ситуация и изменится.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Вопрос с индексом 12 года 8 мес. назад #3160

так?

exec dbms_stats.gather_table_stats(user,'BIG',method_opt=>'FOR ALL COLUMNS SIZE SKEWONLY',cascade=>true);


Да, это один из вариантов сбора гистограмм по всем столбцам. Нужно ли Вам по всем столбцам собирать, я не знаю.

стоимость использования индекса превышает стоимость полного сканирования. поэтому индекс и не используется. вот вырастет табличка побольше, тогда может ситуация и изменится.


И как размер таблицы влияет на использование/неиспользование индекса?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Вопрос с индексом 12 года 8 мес. назад #3161

  • Todd
  • Todd аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Спасибо получено: 0
Вот данные в исходной таблице:
SQL> select status,count(1) from big
  2  group by status;

STATUS    COUNT(1)
------- ----------
INVALID          4
VALID      1416960

из faq я предполагаю, что ошибка в расчете cardinality, Solutions: Помочь решить проблему может собранная гистограмма по "кривому" столбцу

SQL> exec dbms_stats.gather_table_stats(user,'BIG',method_opt=>'FOR ALL INDEXED
 COLUMNS',cascade=>true);

PL/SQL procedure successfully completed.

Elapsed: 00:00:05.35
SQL> select * from big where  status = 'INVALID';

Elapsed: 00:00:00.00

Execution Plan
----------------------------------------------------------
Plan hash value: 3907642201

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
    |   0 | SELECT STATEMENT  |      |   708K|    62M|  5434   (1)| 00:01:06 |
    |*  1 |  TABLE ACCESS FULL| BIG  |   708K|    62M|  5434   (1)| 00:01:06 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("STATUS"='INVALID')


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          7  consistent gets
          0  physical reads
          0  redo size
       1684  bytes sent via SQL*Net to client
        420  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          4  rows processed

С хинтом /*+ INDEX (big ind_stat) */ запрос выполняется быстрее, но стоимоть его больше

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Re: Oracle: Вопрос с индексом 12 года 8 мес. назад #3162

С хинтом /*+ INDEX (big ind_stat) */ запрос выполняется быстрее, но стоимоть его больше

Быстрее, чем за 0 секунд?!!
SQL> select * from big where  status = 'INVALID';

Elapsed: 00:00:00.00

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.256 секунд