写在前面:小编的话
数据库统计信息,有时也称为优化器统计信息。最初,决定如何执行SQL语句由RBO(Rule Based Optimizer)决定,Oracle 7以后改为由CBO(Cost Based Optimizer)决定。CBO即选择成本最低的执行计划。
成本表示给定计划的估计资源使用量。成本越低,执行计划的效率就越高。为了让基于成本的优化器准确地确定一个执行计划的成本,它必须有关于在 SQL 语句中访问的所有对象(表和索引)的信息,以及关于将运行 SQL 语句的系统(CPU和I/O)的信息。这些信息被称为Optimizer Statistics(优化器统计信息)。
了解和管理优化器统计信息是优化 SQL 执行的关键。了解何时以及如何收集统计数据对于性能至关重要。
在正式上课之前,我们还是要强调一下如何学习这些课程。我们做的最主要的工作是将Dev Gym上的视频翻译为中文。实际上每一节课包括4部分:
1)看我们翻译的视频,每一集只有几分钟。
2)上Live SQL做配套练习
3)小测验(选择题)
4)进一步学习(参考资料)
这4部分都是精心设计的,特别是第2和3部分,非常有助于对课程内容的理解,而且由于原网站有完整的评分积分,因此我们希望您在看完视频后,仍回到Dev Gym(https://devgym.oracle.com/)网站完成练习和测验,而且最终可以得到结业证书。点击文末“原文链接”可访问原课程页面。
以下为开发者性能课的课程设置:
第1课: 如何解读执行计划
第2课: 什么是数据库统计信息?<- 我们在这里
第3课: 我的查询做了多少工作?
第4课: 如何创建索引
第5课: 为什么我的查询不使用索引?
第6课: 如何使用物化视图快速汇总数据
第7课: 联接如何工作?
第8课: 如何更快地插入、更新和删除
第9课: 如何查找慢 SQL
好了,下面正式开始上课。
Oracle开发者性能第2课:数据库统计信息
写在后面:小编的话
基本统计信息包括行数,不同值的数量。对于行数较多,数据分布不均匀的表,还需要搜集扩展统计信息。这里所谓的数据分布不均匀,典型的情形包括数据偏离(Data Skew)和关联列(Correlated Columns)。而数据偏离又包括取值偏离(Value Skew)和范围偏离(Range Skew)。
如果真正理解了本课的内容,您应该可以回答以下问题:
1. 什么是选择性(Selectivity)?
2. 什么是基数(Cardinality)?
3. 优化器确定联结(Join)顺序时和选择性的关系,书写SQL语句中WHERE条件时对选择性的考虑。
4. Oracle数据库会自动搜集统计信息吗?何时需要手动搜集统计信息?
视频的配套练习,大家可以在课程页面上登录Live SQL去做,也可以在独立的数据库环境中做,可参考我的博文(1)。在Oracle Blogs网站,Maria Colgan有一篇介绍扩展统计信息的文章(2),Nigel Bayliss有一篇介绍Oracle如何生成直方图的文章(3),也建议大家阅读。
好了,今天的课程就到这里,祝大家学习愉快!
参考链接:
(1) https://blog.csdn.net/stevensxiao/article/details/120957519
(2) https://blogs.oracle.com/optimizer/post/extended-statistics
(3) https://blogs.oracle.com/optimizer/post/how-does-the-oracle-database-choose-what-histograms-to-create
编辑,字幕翻译:萧宇
字幕制作&版式设计:Barbara Huang