Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

86

积分

0

好友

2

主题
1#
发表于 2013-8-12 10:05:32 | 查看: 5518| 回复: 7
本帖最后由 lhpapa 于 2013-8-12 10:13 编辑

一个很简单sql:select * from scott.tt where owner='LINKAGE'
owner上有索引,owner=linkage的只有两行。
做过直方图搜集:
begin
dbms_stats.gather_table_stats(user,'TT',method_opt => 'for all columns size 254');
end;
就是不走索引,10053 里面的选择性貌似有点问题,但是已经做过直方图搜集了,而且:
select a.owner || '.' || a.table_name name,
       a.column_name,
       b.num_rows,
       a.num_distinct Cardinality,
       a.num_distinct / b.num_rows selectivity,
       num_nulls,
       density,
       a.histogram,
       a.num_buckets
  from dba_tab_col_statistics a, dba_tables b
where a.owner = b.owner
   and a.table_name = b.table_name
   and a.owner = upper('SCOTT')
   and a.table_name = upper('TT')
   and a.column_name = upper('OWNER')
去查看:
NAME        COLUMN_NAME        NUM_ROWS        CARDINALITY        SELECTIVITY        NUM_NULLS        DENSITY        HISTOGRAM        NUM_BUCKETS
SCOTT.TT        OWNER        907648        2        2.20349739105909E-6        0        5.40630909587324E-7        FREQUENCY        1
的SELECTIVITY也是正常的,但是10053里面的NewDensity:0.500000是不是有点问题?

mysoc_ora_2320_怀宁 - 副本.rar

9.98 KB, 下载次数: 1280

10053

2#
发表于 2013-8-12 10:22:18
直方图是不是有问题,你试试直方图去掉的话应该是走索引

回复 只看该作者 道具 举报

3#
发表于 2013-8-12 10:36:20
create table tt as select * from dba_objects
insert into tt select * from tt  若干次
create index tt_owner on tt(owner);
update tt set owner='SCOTT'
然后修改了两行记录
SCOTT

回复 只看该作者 道具 举报

4#
发表于 2013-8-12 10:44:01
看一下dba_tab_histograms,你这个列只有两种数据,数据倾斜,我觉得还是直方图的问题

回复 只看该作者 道具 举报

5#
发表于 2013-8-12 10:48:17
SELECT COLUMN_NAME,ENDPOINT_NUMBER, ENDPOINT_VALUE,ENDPOINT_ACTUAL_VALUE
FROM DBA_HISTOGRAMS
WHERE TABLE_NAME ='TT' AND COLUMN_NAME in ('OWNER')
ORDER BY 1,2;
COLUMN_NAME        ENDPOINT_NUMBER        ENDPOINT_VALUE        ENDPOINT_ACTUAL_VALUE
OWNER        5562        4.32325845824965E35       

回复 只看该作者 道具 举报

6#
发表于 2013-8-12 10:49:19
没有直方图肯定是走索引的,选择性是0.5。问题是我现在搜集了直方图,10053里选择性还是0.5,这个很奇怪啊

回复 只看该作者 道具 举报

7#
发表于 2013-8-12 11:03:57
NUM_BUCKETS 是1, 这里有问题,应该是两个桶

回复 只看该作者 道具 举报

8#
发表于 2013-8-12 11:58:05
执行下下面的语句,想看下结果
SELECT A.TABLE_NAME, A.COLUMN_NAME, A.NUM_DISTINCT, B.NUM_ROWS, A.NUM_NULLS,
                         A.DENSITY, A.LOW_VALUE, A.HIGH_VALUE, A.NUM_BUCKETS, A.HISTOGRAM,
                         A.LAST_ANALYZED, A.SAMPLE_SIZE
        FROM DBA_TAB_COL_STATISTICS A, DBA_TABLES B
WHERE A.OWNER = B.OWNER
         AND A.TABLE_NAME = B.TABLE_NAME
         AND A.OWNER = 'SCOTT'
         AND A.TABLE_NAME = UPPER('TT')
         AND A.COLUMN_NAME = UPPER('OWNER')
ORDER BY A.HISTOGRAM;

SELECT A.ENDPOINT_NUMBER, TO_CHAR(A.ENDPOINT_VALUE), A.ENDPOINT_ACTUAL_VALUE
        FROM DBA_HISTOGRAMS A
WHERE A.TABLE_NAME = UPPER('TT')
         AND A.OWNER = 'SCOTT'
         AND A.COLUMN_NAME = UPPER('OWNER')
ORDER BY A.ENDPOINT_NUMBER;

SELECT OWNER,COUNT(1) FROM SCOTT.TT GROUP BY OWNER;

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2025-1-1 09:59 , Processed in 0.051468 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569