11.01.2009, 13:38 | #21 |
MCITP
|
Это был оффтоп-юмор, именно что забыли включить в листинг, то что вы его реально создали и так понятно.
Цитата:
Цитата:
However, and here comes the trap, when a function-based index is created, Oracle will now (since 10g) automatically calculate the statistics associated with the index...
Код: >sqlplus scott/tiger@zvvdb SQL*Plus: Release 11.1.0.6.0 - Production on Sun Jan 11 12:20:42 2009 Copyright (c) 1982, 2007, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production With the Partitioning, OLAP and Data Mining options SQL> set linesize 125 SQL> Drop Table Mytable 2 / Table dropped. SQL> Create Table Mytable(A Varchar2(30)) 2 / Table created. SQL> Insert Into Mytable 2 Select Object_name 3 From All_objects 4 Where Rownum < 11 5 / 10 rows created. SQL> Create Index Mytable_fbi On Mytable(Upper(A)) 2 / Index created. SQL> Create Index Mytable_ni On Mytable(A) 2 / Index created. SQL> Select Table_name, Num_rows, Last_analyzed 2 From User_tables 3 Where Table_name = 'MYTABLE' 4 / TABLE_NAME NUM_ROWS LAST_ANA ------------------------------ ---------- -------- MYTABLE SQL> Select Table_name, Column_name, Num_distinct 2 From User_tab_cols 3 Where Table_name = 'MYTABLE' 4 / TABLE_NAME COLUMN_NAME NUM_DISTINCT ------------------------------ ------------------------------ ------------ MYTABLE A MYTABLE SYS_NC00002$ SQL> Select Table_name, index_name, distinct_keys, num_rows 2 From User_indexes 3 Where Table_name = 'MYTABLE' 4 / TABLE_NAME INDEX_NAME DISTINCT_KEYS NUM_ROWS ------------------------------ ------------------------------ ------------- ---------- MYTABLE MYTABLE_NI 10 10 MYTABLE MYTABLE_FBI 10 10 SQL> При этом, в документации Оракла есть такая фраза: Цитата:
After creating a function-based index, collect statistics on both the index and its base table using the DBMS_STATS package. Such statistics will enable Oracle Database to
correctly decide when to use the index. Цитата:
Сообщение от Андре
Дык не в том вопрос. dbms_stats.gather_scheme_stats - стандартная периодическая операция выполняемая минимум раз в неделю. Почему именно scheme? Потому что мне лень все таблички перебирать
А если мы уже используем dbms_stats.gather_scheme_stats, то смысл в exec dbms_stats.gather_table_stats пропадает. И не всё так однозначно с dbms_stats.gather_table/scheme_stats. Начиная с 10-ки есть, конечно, джоб GATHER_STATS_JOB, который типа делает всё сам. Но в 9-ке мне приходилось, например, делать сбор статистики по гораздо более сложной схеме, чем "dbms_stats.gather_scheme_stats раз в неделю", потому что на огромных объёмах схемы такая концепция становится крайне непродуктивной. Приходилось разделять как-то таблицы на группы и собирать статистику по частям, какие-то чаще, какие-то реже, ну и т.д.. В зависимости от структуры данных. А лень таблички перебирать - это только до тех пор, пока полная статистика на схему не начинает день-другой пересобираться.
__________________
Zhirenkov Vitaly Последний раз редактировалось ZVV; 11.01.2009 в 13:48. Причина: грамматика |
|
|
За это сообщение автора поблагодарили: Андре (2). |
11.01.2009, 13:41 | #22 |
MCITP
|
Да, "правильно"...
__________________
Zhirenkov Vitaly |
|
11.01.2009, 13:53 | #23 |
Moderator
|
X++: , , 10- .. |
|