没有高并发,亿万级数据优化的sql脚本九

        各位读者大家好,上一章节介绍了常见索引和执行计划。在介绍执行计划的时候有这样一段代码我们来详细讲解介绍一下:

        begin
            dbms_stats.gather_table_stats(
                ownname => user,
                tabname => 'employees',
                estimate_percent => 100,
                cascade => true,
                method_opt => 'for all columns size auto'
            );
        end;
        上面这段sql的作用是数据库收集表employees的统计信息。具体包括表数据分布特征,含表数据的行数、块数、平均行长等信息;cascade => true参数会收集表所有的索引的统计信息(例如索引深度、聚合因子等);method_opt => 'for all columns size auto'参数会分析列数据分布,记录所有列的数据分布特征;estimate_percent => 100表示对表数据进行100%采样。保证统计信息的准确性。
        当我们要测试执行计划的时候,为了保证执行计划的准确性就需要让扫描优化器获取到表数据的统计信息是最新的,否则执行计划就会滞后,进而有可能带给我们对sql执行的误判。例如当我们往表里面新增10万条数据后,此时数据库对该表保存的统计信息未必就一定是10万数据的统计信息。oracle数据库自动收集统计信息的频率有其默认的时间窗口和触发条件(一般是当表数据修改量超过10%时触发收集)。当我们执行上面那段sql就是手动触发收集最新的统计信息。我们可以通过下面的sql来查看统计信息更新情况:


        -- 查看表统计信息
        select last_analyzed, num_rows, blocks
        from user_tables
        where table_name = 'EMPLOYEES';

        -- 查看列统计信息  
        select column_name, num_distinct, histogram
        from user_tab_columns
        where table_name = 'EMPLOYEES';

        -- 查看索引统计
        select index_name, last_analyzed, clustering_factor
        from user_indexes
        where table_name = 'EMPLOYEES';

        例如当我们执行上面三条sql后返回结果分别如下图:

        

       

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangzewu1

谢谢您的鼓励,一分钱都是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值