SQL性能优化策略(四)

1、提高GROUP BY语句的效率,可以通过将不需要的记录在GROUP BY之前过滤掉。下面两个查询返回相同结果,但第二个明显就快了许多。

       低效:

       SELECT JOB , AVG(SAL)

       FROM EMP

       GROUP BY JOB

       HAVING JOB =’PRESIDENT’

       OR JOB =’MANAGER

       高效:

       SELECT JOB , AVG(SAL)

       FROM EMP

       WHERE JOB =’PRESIDENT’

       OR JOB =’MANAGER’

       GROUP BY JOB

2、SQL语句用大写,因为Oracle总是先解析SQL语句,把小写的字母转换成大写的再执行。

3、别名的使用,别名是大型数据库的应用技巧,就是表名、列名在查询中以一个字母为别名,查询速度要比建连接表快1.5倍。

4、避免死锁,在你的存储过程和触发器中访问同一个表时总是以相同的顺序;事务应经可能地缩短,在一个事务中应尽可能减少涉及到的数据量;永远不要在事务中等待用户输入。

5、避免使用临时表,除非却有需要,否则应尽量避免使用临时表,相反,可以使用表变量代替;大多数时候(99%),表变量驻扎在内存中,因此速度比临时表更快,临时表驻扎在TempDb数据库中,因此临时表上的操作需要跨数据库通信,速度自然慢。

6、最好不要使用触发器:

     触发一个触发器,执行一个触发器事件本身就是一个耗费资源的过程;

     如果能够使用约束实现的,尽量不要使用触发器;

    不要为不同的触发事件(Insert,Update和Delete)使用相同的触发器;

   不要在触发器中使用事务型代码。

7、索引创建规则:

  • 表的主键、外键必须有索引;
  • 数据量超过300的表应该有索引;
  • 经常与其他表进行连接的表,在连接字段上应该建立索引;
  • 经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
  • 索引应该建在选择性高的字段上;
  • 索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
  • 复合索引的建立需要进行仔细分析,尽量考虑用单字段索引代替;
  • 正确选择复合索引中的主列字段,一般是选择性较好的字段;
  • 复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有.如果是,则可以建立复合索引;否则考虑单字段索引;
  • 如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;
  • 如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;
  • 如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;
  • 频繁进行数据操作的表,不要建立太多的索引;删除无用的索引,避免对执行计划造成负面影响;
  • 表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上的开销。
  • 另外,过多的复合索引,在有单字段索引的情况下,一般都是没有存在价值的;相反,还会降低数
  • 据增加删除时的性能,特别是对频繁更新的表来说,负面影响更大。
  • 尽量不要对数据库中某个含有大量重复的值的字段建立索引。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值