`

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

 
阅读更多
原文地址:http://www.cnblogs.com/AK2012/archive/2012/12/28/2012-122803.html



数据库优化包含以下三部分,数据库自身的优化,数据库表优化,程序操作优化.此文为第三部分
  数据库性能优化三:程序操作优化
概述:程序访问优化也可以认为是访问SQL语句的优化,一个好的SQL语句是可以减少非常多的程序性能的,下面列出常用错误习惯,并且提出相应的解决方案


  一、操作符优化

  1. IN、NOT IN 操作符

  IN和EXISTS 性能有外表和内表区分的,但是在大数据量的表中推荐用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子句

  尽量不要写没有WHERE的SQL语句

  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’


  E、UPDATE操作不要拆成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  
分享到:
评论

相关推荐

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

    数据库优化包含以下三部分,数据库自身的优化,数据库表优化,程序操作优化.此文为第三部分 概述:程序访问优化也可以认为是访问SQL语句的优化,一个好的SQL语句是可以减少非常多的程序性能的,下面列出常用错误...

    数据库性能优化二:数据库表优化提升性能

    数据库优化包含以下三部分,数据库自身的优化,数据库表优化,程序操作优化.此文为第二部分 优化①:设计规范化表,消除数据冗余 数据库范式是确保数据库结构合理,满足各种查询需要、避免数据库操作异常的数据库...

    数据库性能优化一:数据库自身优化提升性能

    数据库优化包含以下三部分,数据库自身的优化,数据库表优化,程序操作优化.此文为第一部分 优化①:增加次数据文件,设置文件自动增长(粗略数据分区) 1.1:增加次数据文件 从SQLSERVER2005开始,数据库不默认...

    SqlServer数据库性能优化详解

    为达到此目的,需要了解应用程序的需求和数据的逻辑和物理结构,并在相互冲突的数据库使用之间(如联机事务处理 (OLTP) 与决策支持)权衡。 对性能问题的考虑应贯穿于开发阶段的全过程,不应只在最后实现系统时才...

    数据库性能优化之SQL语句优化

    数据库性能优化之SQL语句优化数据库性能优化之SQL语句优化数据库性能优化之SQL语句优化数据库性能优化之SQL语句优化

    Oracle数据库系统性能优化策略

    计阶段进行数据库性能优化的成本最低,收益最大。在成品阶段进行数据库 性能优化的成本最高,收益最小。数据库的优化可以通过对网络、硬件、操 作系统、数据库参数和应用程序的优化来进行。最常见的优化手段就是对硬...

    Oracle数据库性能优化.doc

    Oracle数据库性能优化.doc,帮助提高数据量大的时候,不会影响程序性能

    面向程序员的数据库访问优化原则

    开发人员:如果你是做数据库开发,那本文的内容非常适合,因为本文是从程序员的角度来谈数据库性能优化。 架构师:如果你已经是数据库应用的架构师,那本文的知识你应该清楚90%,否则你可能是一个喜欢折腾的架构师...

    SQL Server 数据库技术---基础篇、数据库安全、SQL开发、数据库性能优化

    SQL Server 数据库技术---基础篇(T-SQL基础、数据库几本操作、SQL Server 2008新特性)、数据库安全(SQL Server 2008 安全数据...、数据库性能优化(数据库存储与索引、数据查询、事务处理、数据库系统调优 工具)

    数据库性能优化详解

    性能调节的目的是通过将网络流通、磁盘 I/O 和 CPU 时间减到最小,使每个查询的响应时间最短并最大限度地提高整个数据库服务器的吞吐量。为达到此目的,需要了解应用程序的需求和数据的逻辑和物理结构,并在相互冲突...

    ORACLE数据库性能优化

    数据库性能优化包括如下几个部分: 1、1、调整数据结构的设计。 2、2、调整应用程序结构设计。 3、3、调整数据库SQL语句。 4、4、调整服务器内存分配。 5、5、调整硬盘I/O。 6、6、调整操作系统参数。 ......

    sql server2005/2008 性能优化大全 .pptx

    SQL2005性能优化大全,sqlserver性能优化,包括:什么叫做索引、利用索引优化sqlserver查询、使用数据库分区表提高程序检索效率、提高数据库查询效率的实用方法...对于数据库性能优化,尤其是大数据量的数据表很有帮助!

    SQLServer数据库应用程序性能优化方法

    出多种基于SQL Server 数据库的应用程序性能优化方法:选择性能优越的服务器;优化数据库设计;使用查询效率较高的查 询语句;使用存储过程;有效的使用事务和批处理;避免阻塞;选择合适的开发工具和采用有效的...

    数据库性能优化技术概述

    性能调节的目的是通过将网络流通、磁盘 I/O 和 CPU 时间减到最小,使每个查询的响应时间最短并最大限度地提高整个数据库服务器的吞吐量。为达到此目的,需要了解应用程序的需求和数据的逻辑和物理结构,并在相互冲突...

    阿里巴巴Java性能调优实战(2021-2022华山版)+Java架构核心宝典+性能优化手册100技巧.rar

    性能优化手册是一套java性能学习研究小技巧,包含内容:Java性能优化、JVM性能优化、服务器性能优化、数据库性能优化、前端性能优化等。 内容包括但不限于: String 性能优化的 3 个小技巧 HashMap 7 种遍历方式...

    SQL Server数据库性能优化

    设计1个应用系统似乎并不难,但是要想使系统达到最优化的性能并不是一件容易的事。在开发工具、数据库设计、应用...本文以SQL Server为例,从后台数据库的角度讨论应用程序性能优化技巧,并且给出了一些有益的建议。

    浅谈数据库系统优化.docx

    网络中数据的查询和传输速度及效率不仅仅在于服务器,而是和多种因素相关联的,根据网络上的相关统计,对和数据库相关的各个外部因素进行调整,同样可以达到数据库性能优化的目的。相关因素主要包括,网络、操作系统...

    程序性能调优技巧(数据库优化和应用优化,By_Chinasei)

    程序性能调优技巧(数据库优化和应用优化,By_Chinasei) 版权所有 郭可华 很实用的技巧,适合学习!

Global site tag (gtag.js) - Google Analytics