《SQL优化策略》PPT课件

《SQL优化策略》PPT课件

ID:37689112

大小:411.10 KB

页数:32页

时间:2019-05-28

《SQL优化策略》PPT课件_第1页
《SQL优化策略》PPT课件_第2页
《SQL优化策略》PPT课件_第3页
《SQL优化策略》PPT课件_第4页
《SQL优化策略》PPT课件_第5页
资源描述:

《《SQL优化策略》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、提纲SQL优化脚本的几个注意点SQL解析执行SQL执行计划共享sql语句Oracle将用户提交的SQL语句进行解析,然后将执行计划放在内存(系统全局区SGA)中,这样可以减少对相同sql语句的重复解析。判断过程:1、对文本串计算hashed值比较;2、语句所涉及的对象比较。Rowid的概念Rowid是访问表中的给定的行的最快的访问方法,通过ROWID可以直接定位到相应的数据块上,然后将其读到内存。(索引也是通过rowid快速访问数据)RecursiveSQL概念为了执行用户发出的一个sql语句,Oracle必须执行一些额

2、外的语句。比如当我们发送一个DDL请求时,oracle会隐含的执行RecursiveSql来修改相关的数据字典信息RowSource(行源)相当于SQL操作的中间结果,比如上一操作返回的符合条件的行的集合(可以是表的全部行数据或者部分行数据)DrivingTable(驱动表)即前面说的基础表,我们应该尽量使用在应用查询的限制条件后,返回较少行源的表作为驱动表。SQL执行计划ProbedTable(被探查表)即被驱动的内层表,一般该表较大并且相应被驱动关联的列上应该有索引。访问路径(方法)(accesspath)优化器在形

3、成执行计划时需要做的一个重要选择是如何从数据库查询出需要的数据。对于SQL语句存取的任何表中的任何行,可能存在许多存取路径(存取方法),通过它们可以定位和查询出需要的数据,优化器会选择最优路径。(数据库块是最小的IO单位,即使只读一行数据,也会将整块的数据读到内存中)1)全表扫描(FullTableScans,FTS)Oracle会顺序分配给表的每个数据块,直到最高水平线(HWM)。使用FTS的前提条件:在较大的表上不建议使用全表扫描,除非取出数据的比较多,超过总量的5%--10%,或你想使用并行查询功能时。2)通过RO

4、WID的表存取(TableAccessbyROWID或rowidlookup)3)索引扫描(IndexScan或indexlookup)一次I/O只能读取一个数据块表之间的连接表之间的连接顺序对于查询的效率有非常大的影响,一般以较小的rowsource来驱动较大的rowsource.嵌套循环(NestedLoops,NL)哈希连接(HashJoin,HJ)SQL优化原则选择最有效率的表名顺序(只在基于规则的优化器中有效)ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表)将

5、被最先处理,在FROM子句中包含多个表的情况下,尽量选择记录条数最少的表作为基础表。WHERE子句中的连接顺序ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接应该写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件应该写在WHERE子句的末尾。SELECT子句中避免使用'*‘Oracle在解析的时候会通过查询数据字典,将‘*’转换成所有的列,所以尽量只写我们所需要的字段列。多表连接时,尽量使用表的别名(Alias)当在SQL语句中连接多个表时,请使用表的别名并把别名前缀于每个Colum

6、n上。这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误。用EXISTS替代IN、用NOTEXISTS替代NOTIN使用Notin或者in时,子句内部会先执行一个全表遍历,效率较低。使用exists会直接关联匹配并返回满足条件的记录。删除表全部记录delete删除指定条件的数据,删除的数据会记录在滚回段,可恢复,速度慢;truncate删除整个表的数据,不可恢复,速度快(直接重置HWM)减少对表的查询在含有子查询的SQL语句中,要特别注意减少对表的查询.例如:低效SELECTTAB_NAME FRO

7、MTABLES WHERETAB_NAME=(SELECTTAB_NAME FROMTAB_COLUMNS WHEREVERSION=604) ANDDB_VER=(SELECTDB_VER FROMTAB_COLUMNS WHEREVERSION=604)高效SELECTTAB_NAME FROMTABLES WHERE(TAB_NAME,DB_VER) =(SELECTTAB_NAME,DB_VER) FROMTAB_COLUMNS WHEREVERSION=604)Update多个Column例子:低效: UPD

8、ATEEMPSETEMP_CAT=(SELECTMAX(CATEGORY)FROMEMP_CATEGORIES), SAL_RANGE=(SELECTMAX(SAL_RANGE)FROMEMP_CATEGORIES)WHEREEMP_DEPT=0020;高效: UPDATEEMPSET(EMP_CAT,SAL_RAN

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。