由于直方图的限制,直方图中只存储12c之前的前32个字符(或12c以上的64个字符)。 具有相同前32个字符的值将被视为相同,这会导致更多列值被视为常用值。 这会导致估计不正确的基数,并错误地选择TABLE FULL SCAN。
执行以下命令删除12c之前超过32个字符(或12c以上64个字符)的列的错误直方图:
exec DBMS_STATS.DELETE_COLUMN_STATS(ownname=>'<owner>',tabname=>'<table name>',colname=>'<column name>',col_stat_type=>'HISTOGRAM');