future2012lg

博客园 首页 新随笔 联系 订阅 管理

2013年4月17日 #

摘要: Explain语法EXPLAIN SELECT ……变体:1. EXPLAIN EXTENDED SELECT ……将执行计划“反编译”成SELECT语句,运行SHOW WARNINGS 可得到被MySQL优化器优化后的查询语句 2. EXPLAIN PARTITIONS SELECT ……用于分区表的EXPLAIN执行计划包含的信息id包含一组数字,表示查询中执行select子句或操作表的顺序id相同,执行顺序由上至下如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行select_ty. 阅读全文
posted @ 2013-04-17 14:57 future2012lg 阅读(145) 评论(0) 推荐(0) 编辑

摘要: 1、 能用基表达到目的的,尽量用基表。当然,需要用视图的,如HR模块涉及到权限控制时,必须用视图。2、 索引,这个不在赘述。3、 汇总的时候,如果是两次汇总,大汇总的字段可以由小汇总字段得出。如集团公司由它的二级部门写函数得出。所在在cursor里,可以只小汇总,如只按二级部门汇总,输出的时候才条件判断来进行大汇总。4、 如果主cursor很庞大,可以将其分解成若干个小cursor,多写一些函数,也可以提高效率,分解主cursor。5、 循环cursor时:避免重复性的基于同值的计算。避免重复性的调用同参数的同函数,可以只计算一次,把结果赋给一个变量。如果是在cursor里,当汇总的时候,也是 阅读全文
posted @ 2013-04-17 10:33 future2012lg 阅读(315) 评论(0) 推荐(0) 编辑

摘要: (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。假如有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表. (2) WHERE子句中的连接顺序.: ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的.. 阅读全文
posted @ 2013-04-17 10:32 future2012lg 阅读(394) 评论(0) 推荐(1) 编辑