学习查询优化器不是我们的目的,而是通过它,我们掌握SQL Server是如何处理我们的SQL的,掌握执行计划,掌握为什么产生I/O问题,为什么CPU使用老高,为什么你的索引加了不起作用…数据库优化就是这样的:没有所谓的“绝对手段,一下子把性能搞上去,一切都是看情况而定”,都是通过不断的分析,抽丝剥解。不带头脑的优化,能好到那里去?
查询优化器的结果就是产生执行计划,执行计划就是一个树,这个树由很多的物理操作组成,而这些物理操作就定义了如何去存储设备中去获取数据。关键点在于:每步都是单独的一次I/O,但对于索引,由于经常使用,绝大多数都已经CACHE到内存中,所以第1步的I/O经常是逻辑I/O,即数据可以从内存中得到;但是对于第2步来说,如果表比较大,则其数据不可能全在内存中,则其I/O很有可能是物理I/O,这是一个机械操作,相对逻辑I/O来说,极其费时。
为 了不重复解析相同的SQL语句(因为解析操作比较费资源,会导致性能下降),在第一次解析之后,ORACLE将SQL语句及解析后得到的执行计划存放在 内存中。这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享。
系列文章索引:
查询优化器内核剖析第一篇
查询优化器内核剖析第二篇:产生候选执行计划&执行计划成本估算
查询优化器内核剖析第三篇:查询的执行与计划的缓存 & Hint提示
查询优化器内核剖析第四篇:从一个实例看执行计划
查询优化器内核剖析第七篇:执行引擎之数据访问操作—Scan
CSDN
Oracle sql执行计划解析
百度文库:
http://wenku.baidu.com/u/%E5%A4%A7%E6%B4%8B1983?from=wenku
道客巴巴
http://www.doc88.com/p-3157969512849.html
[精华] 通过分析SQL语句的执行计划优化SQL总结7年DBA工作经验
心得:
1.查看执行计划确定重大消耗资源原因
2.针对消耗资源主要原因进行解决,一般情况有:
(1)有大表,数据量巨大。一、酌情考虑减小查询体量 二、恰当地建立索引。
(2)优化查询结构,unique、hash join等,最好将unique放到底层表再做join。
(3)优化查询方法,避免重复工作,寻找最直接有效的查询方式。
…
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/7157.html