数据库性能优化三:程序操作优化

转载 2015年07月07日 22:36:01
数据库优化包含以下三部分,数据库自身的优化,数据库表优化,程序操作优化.此文为第三部分

  数据库性能优化三:程序操作优化

概述:程序访问优化也可以认为是访问SQL语句的优化,一个好的SQL语句是可以减少非常多的程序性能的,下面列出常用错误习惯,并且提出相应的解决方案

 

  一、操作符优化

  1. IN、NOT IN 操作符

  INEXISTS 性能有外表和内表区分的,但是在大数据量的表中推荐用EXISTS 代替IN 

  Not IN 不走索引的是绝对不能用的,可以用NOT EXISTS 代替

  2. IS NULL IS NOT NULL操作

    索引是不索引空值的,所以这样的操作不能使用索引,可以用其他的办法处理,例如:数字类型,判断大于0,字符串类型设置一个默认值,判断是否等于默认值即可

  3. <> 操作符(不等于) 
  不等于操作符是永远不会用到索引的,因此对它的处理只会产生全表扫描。 用其它相同功能的操作运算代替,如 a<>0 改为 a>0 or a<0    a<>’’ 改为 a>’’ 

  4. 用全文搜索搜索文本数据,取代like搜索

  全文搜索始终优于like搜索:

  (1)全文搜索让你可以实现like不能完成的复杂搜索,如搜索一个单词或一个短语,搜索一个与另一个单词或短语相近的单词或短语,或者是搜索同义词;

  (2)实现全文搜索比实现like搜索更容易(特别是复杂的搜索);

 

  二、SQL语句优化

  1、在查询中不要使用  select * 

    为什么不能使用,地球人都知道,但是很多人都习惯这样用,要明白能省就省,而且这样查询数据库不能利用“覆盖索引”了

  2. 尽量写WHERE子句

  尽量不要写没有WHERESQL语句

  3. 注意SELECT INTO后的WHERE子句

  因为SELECT INTO把数据插入到临时表,这个过程会锁定一些系统表,如果这个WHERE子句返回的数据过多或者速度太慢,会造成系统表长期锁定,诸塞其他进程。
  4.对于聚合查询,可以用HAVING子句进一步限定返回的行

  5. 避免使用临时表

  (1)除非却有需要,否则应尽量避免使用临时表,相反,可以使用表变量代替;

  (2)大多数时候(99%),表变量驻扎在内存中,因此速度比临时表更快,临时表驻扎在TempDb数据库中,因此临时表上的操作需要跨数据库通信,速度自然慢。

 

  6.减少访问数据库的次数:

    程序设计中最好将一些常用的全局变量表放在内存中或者用其他的方式减少数据库的访问次数
 

  7.尽量少做重复的工作
  尽量减少无效工作,但是这一点的侧重点在客户端程序,需要注意的如下:
  A、 控制同一语句的多次执行,特别是一些基础数据的多次执行是很多程序员很少注意的

  B、减少多次的数据转换,也许需要数据转换是设计的问题,但是减少次数是程序员可以做到的。

  C、杜绝不必要的子查询和连接表,子查询在执行计划一般解释成外连接,多余的连接表带来额外的开销。

  D、合并对同一表同一条件的多次UPDATE,比如
  UPDATE EMPLOYEE SET FNAME=’HAIWER’ WHERE EMP_ID=’ VPA30890F’
  UPDATE EMPLOYEE SET LNAME=’YANG’ WHERE EMP_ID=’ VPA30890F’
  这两个语句应该合并成以下一个语句
  UPDATE EMPLOYEE SET FNAME=’HAIWER’,LNAME=’YANG’  
  WHERE EMP_ID=’ VPA30890F’


  EUPDATE操作不要拆成DELETE操作+INSERT操作的形式,虽然功能相同,但是性能差别是很大的。

  F、不要写一些没有意义的查询,比如
    SELECT * FROM EMPLOYEE WHERE 1=2

  三、where使用原则

  1)在下面两条select语句中:
  select * from table1 where field1<=10000 and field1>=0;
  select * from table1 where field1>=0 and field1<=10000;
  如果数据表中的数据field1>=0,则第一条select语句要比第二条select语句效率高的多,因为第二条select语句的第一个条件耗费了大量的系统资源。
  第一个原则:在where子句中应把最具限制性的条件放在最前面。
  2)在下面的select语句中:
  select * from tab where a=… and b=… and c=…;
  若有索引index(a,b,c),则where子句中字段的顺序应和索引中字段顺序一致。
  第二个原则:where子句中字段的顺序应和索引中字段顺序一致。


  以下假设在field1上有唯一索引I1,在field2上有非唯一索引I2
  3) select field3,field4 from tb where field1='sdf' 
  select * from tb where field1='sdf' 慢,
  因为后者在索引扫描后要多一步ROWID表访问。


  select field3,field4 from tb where field1>='sdf' 
  select field3,field4 from tb where field1>'sdf' 
  因为前者可以迅速定位索引。


  select field3,field4 from tb where field2 like 'R%' 
  select field3,field4 from tb where field2 like '%R' 慢,
  因为后者不使用索引。


  4) 使用函数如:
  select field3,field4 from tb where upper(field2)='RMN'不使用索引。
  如果一个表有两万条记录,建议不使用函数;如果一个表有五万条以上记录,严格禁止使用函数!两万条记录以下没有限制。

  以上可能部分文章借鉴了其他的网络文章,本文仅为学习使用,转载请注明出处

                                   --------------AK(老K):2012-12-28  

Android 性能优化 (二)数据库优化 秒变大神

1.数据库插入效率  有三种方法: 1)直接拼接SQL语句,执行execSQL方法; 2)借用ContentValues进行插入; 3)使用compileStatement进行插入; 1)直接...
  • WHB20081815
  • WHB20081815
  • 2017年04月12日 13:51
  • 750

数据库性能优化详解

1.数据库访问优化法则 要正确的优化SQL,我们需要快速定位能性的瓶颈点,也就是说快速找到我们SQL主要的开销在哪里?而大多数情况性能最慢的设备会是瓶颈点,如下载时网络速度可能会是瓶颈点...
  • yzllz001
  • yzllz001
  • 2017年02月03日 17:38
  • 34721

数据库性能优化策略

有数据表明:用户可以承受的最大等待时间为8秒。 之前曾见过某个产品的一个列表页,40秒左右才能加载出来,几乎没有进行任何优化措施。 没有索引,没有缓存机制,没有进行sql优化(sql语句很长,并且...
  • u013628152
  • u013628152
  • 2016年07月05日 22:24
  • 2229

优化Python程序性能的15个小技巧

如果你已经熟悉Python,本文介绍的小技巧将在优化Python程序的性能方面有一定作用。 1、使用profile和timeit模块来测试程序的性能。 2、减少函数调用的次数。 ...
  • luckyjoy521
  • luckyjoy521
  • 2014年04月06日 17:08
  • 1161

数据库性能优化三:程序操作优化

数据库优化包含以下三部分,数据库自身的优化,数据库表优化,程序操作优化.此文为第三部分   数据库性能优化三:程序操作优化 概述:程序访问优化也可以认为是访问SQL语句的优化,一个好的SQL语句是...
  • maliao1123
  • maliao1123
  • 2017年01月11日 16:54
  • 61

数据库性能优化三:程序操作优化

数据库优化包含以下三部分,数据库自身的优化,数据库表优化,程序操作优化.此文为第三部分   数据库性能优化三:程序操作优化 概述:程序访问优化也可以认为是访问SQL语句的优化,一个好的SQL语句是...
  • zhushuai1221
  • zhushuai1221
  • 2016年06月23日 10:54
  • 244

数据库性能优化三:程序操作优化

http://www.cnblogs.com/AK2012/archive/2012/12/28/2012-122803.html 数据库优化包含以下三部分,数据库自身的优化,数据库表优化,程序...
  • xj626852095
  • xj626852095
  • 2015年08月21日 15:03
  • 256

优化程序性能总结

性能优化有三个层次: 系统层次 算法层次 代码层次 系统层次关注系统的控制流程和数据流程,优化主要考虑如何减少消息传递的个数;如何使系统的负载更加均衡;如何充分利用硬件的性能和设施;如何减少系...
  • u013240812
  • u013240812
  • 2015年10月23日 14:34
  • 2620

数据库性能优化三:程序操作优化

概述:程序访问优化也可以认为是访问SQL语句的优化,一个好的SQL语句是可以减少非常多的程序性能的,下面列出常用错误习惯,并且提出相应的解决方案     一、操作符优化   1. IN、NOT ...
  • pcxbest
  • pcxbest
  • 2013年01月17日 19:35
  • 229

数据库性能优化三:程序操作优化

转自:数据库性能优化三:程序操作优化 概述:程序访问优化也可以认为是访问SQL语句的优化,一个好的SQL语句是可以减少非常多的程序性能的,下面列出常用错误习惯,并且提出相应的解决方案 ...
  • xintingandzhouyang
  • xintingandzhouyang
  • 2015年04月13日 11:29
  • 243
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据库性能优化三:程序操作优化
举报原因:
原因补充:

(最多只允许输入30个字)