3.3 如果where条件类似于function_name(table_name.column_name)=’XXX’时,则优化器在估计这样的where条件的selectivity时,总是会假设其selectivity为1%,也就是该where条件将返回table_name里总记录行数的1%的记录行数。显然,这种假设是错误的,可能导致优化器生成不够优化的执行计划。从11g开始,我们可以对函数或表达式进行统计信息收集。该特性基于虚拟列,需使用dbms_stats.create_extended_stats函数为function_name(table_name.column_name)创建虚拟列,然后收集统计信息。例如:select dbms_stats.create_extended_stats('Schema_name','Table_name','length(C1)') from dual; 对表达式收集统计信息:select dbms_stats.create_extended_stats('Schema_name','Table_name','C1*C2') from dual; 对表收集统计信息时,将收集length(C1)对应的虚拟列统计信息。要对虚拟列收集直方图,可执行:exec dbms_stats.gather_table_stats('Schema_name','Table_name', method_opt=>'for columns (length(C1)) size AUTO'); 3.4 _PRIVATE_STATS提供私有统计信息,可通过DBMS_STAT.EXPORT_PRIVATE_STATS存储过程将其转移到自定义统计信息表,然后使用expdp导出,并通过impdp导入测试环境,最后使用DBMS_STAT.IMPORT_TABLE_STATS进行测试。