加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

数据库 – 为什么他们使用DBMS_STATS.GATHER_TABLE_STATS?

发布时间:2021-04-01 16:47:18 所属栏目:编程 来源:网络整理
导读:我发明文件表明说oracle行使这些来举办机能调优等可是并不完全领略它现实上做了什么.有人可以用简朴的单词和很是根基的例子向我表明一下吗? 办理要领 包括Oracle的大大都企业数据库行使基于本钱的优化器来确定给定SQL语句的恰当查询打算.这意味着优化器行使

我发明文件表明说oracle行使这些来举办机能调优等可是并不完全领略它现实上做了什么.有人可以用简朴的单词和很是根基的例子向我表明一下吗?

办理要领

包括Oracle的大大都企业数据库行使基于本钱的优化器来确定给定SQL语句的恰当查询打算.这意味着优化器行使有关数据的信息来确定怎样执行查询而不是依靠于法则(这是旧的基于法则的优化器所做的).

譬喻,想象一个简朴的错误跟踪应用措施的表

CREATE TABLE issues (
  issue_id number primary key,issue_text clob,issue_status varchar2(10)
);

CREATE INDEX idx_issue_status
    ON issues( issue_status );

假如我是一家大公司,我也许在这张表中有100万行.个中,100个具有ACTIVE_status,10,000个具有QUEUED的issue_status,而989,900具有COMPLETE状态.假如我想对表运行查询以查找我的勾当题目

SELECT *
  FROM issues
 WHERE issue_status = 'ACTIVE'

优化器有一个选择.它可以行使issue_status上的索引,然后在表中为匹配的索引中的每一行执行单行查找,也可以在题目表上执行表扫描.哪个打算更有用将取决于表中的数据.假如Oracle但愿查询返回表中的一小部门数据,那么行使索引会更有用.假如Oracle但愿查询返回表中大部门数据,则表扫描会更有用.

DBMS_STATS.GATHER_TABLE_STATS网络了应承Oracle做出此抉择的统计信息.它汇报Oracle表中约莫有100万行,issue_status列有3个差异的值,而且数据漫衍不匀称.因此Oracle知道行使查询索引来查找全部勾当题目.但它也知道,当你回身并试图探求全部已封锁的题目

SELECT *
  FROM issues
 WHERE issue_status = 'CLOSED'

执行表扫描会更有服从.

网络统计信息应承查询打算跟着数据量和数据漫衍的变革而随时刻变革.当您第一次安装题目跟踪器时,您将碰着很少的COMPLETED题目以及更多ACTIVE和QUEUED题目.跟着时刻的推移,COMPLETED题目的数目上升得更快.当您在表中得到更多行而且各类状态中这些行的相对分数产生变革时,查询打算将产生变革,以便在抱负环境下,您始终可以得到最有用的打算.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读