`
xdlliutao
  • 浏览: 38539 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

兄弟连教育分享-SQL性能优化十条经验

阅读更多

1.查询的模糊匹配

尽量避免在一个复杂查询里面使用 LIKE '%parm1%'——红色标识位置的百分号会导致相关列的索引无法使用,最好不要用.



兄弟连教育分享-SQL性能优化十条经验www.lampbrother.net

解决办法:

其实只需要对该脚本略做改进,查询速度便会提高近百倍。改进方法如下:

a、修改前台程序——把查询条件的供应商名称一栏由原来的文本输入改为下拉列表,用户模糊输入供应商名称时,直接在前台就帮忙定位到具体的供应商,这样在调用后台程序时,这列就可以直接用等于来关联了。

b、直接修改后台——根据输入条件,先查出符合条件的供应商,并把相关记录保存在一个临时表里头,然后再用临时表去做复杂关联

2.索引问题

在做性能跟踪分析过程中,经常发现有不少后台程序的性能问题是因为缺少合适索引造成的,有些表甚至一个索引都没有。这种情况往往都是因为在设计表时,没去定义索引,而开发初期,由于表记录很少,索引创建与否,可能对性能没啥影响,开发人员因此也未多加重视。然一旦程序发布到生产环境,随着时间的推移,表记录越来越多

这时缺少索引,对性能的影响便会越来越大了。

这个问题需要数据库设计人员和开发人员共同关注

法则:不要在建立的索引的数据列上进行下列操作:

◆避免对索引字段进行计算操作

◆避免在索引字段上使用not,<>,!=

◆避免在索引列上使用IS NULL和IS NOT NULL

◆避免在索引列上出现数据类型转换

◆避免在索引字段上使用函数

◆避免建立索引的列中使用空值。

3.复杂操作

部分UPDATE、SELECT 语句写得很复杂(经常嵌套多级子查询)——可以考虑适当拆成几步,先生成一些临时数据表,再进行关联操作

4.update

同一个表的修改在一个过程里出现好几十次,如:

update table1

set col1=...

where col2=...;

update table1

set col1=...

where col2=...

......



象这类脚本其实可以很简单就整合在一个UPDATE语句来完成(前些时候在协助xxx项目做性能问题分析时就发现存在这种情况)

5.在可以使用UNION ALL的语句里,使用了UNION

UNION 因为会将各查询子集的记录做比较,故比起UNIONALL ,通常速度都会慢上许多。一般来说,如果使用UNION ALL能满足要求的话,务必使用UNION ALL。还有一种情况大家可能会忽略掉,就是虽然要求几个子集的并集需要过滤掉重复记录,但由于脚本的特殊性,不可能存在重复记录,这时便应该使用UNION ALL,如xx模块的某个查询程序就曾经存在这种情况,见,由于语句的特殊性,在这个脚本中几个子集的记录绝对不可能重复,故可以改用UNION ALL)

6.在WHERE 语句中,尽量避免对索引字段进行计算操作

这个常识相信绝大部分开发人员都应该知道,但仍有不少人这么使用,我想其中一个最主要的原因可能是为了编写写简单而损害了性能,那就不可取了

9月份在对XX系统做性能分析时发现,有大量的后台程序存在类似用法,如:

......

where trunc(create_date)=trunc(:date1)



虽然已对create_date 字段建了索引,但由于加了TRUNC,使得索引无法用上。此处正确的写法应该是

where create_date>=trunc(:date1) andcreate_date[tr]</trunc(:date1)+1

或者是

where create_date between trunc(:date1) andtrunc(:date1)+1-1/(24*60*60)



注意:因between 的范围是个闭区间(greater than or equal to low value and less than or equal to highvalue.),

故严格意义上应该再减去一个趋于0的小数,这里暂且设置成减去1秒(1/(24*60*60)),如果不要求这么精确的话,可以略掉这步。

7.对Where 语句的法则

7.1 避免在WHERE子句中使用in,not  in,or 或者having。

可以使用 exist 和not exist代替 in和not in。

可以使用表链接代替 exist。Having可以用where代替,如果无法代替可以分两步处理。

例子

SELECT * FROM ORDERS WHERE CUSTOMER_NAME NOT IN

(SELECT CUSTOMER_NAME FROM CUSTOMER)



优化



SELECT * FROM ORDERS WHERE CUSTOMER_NAME not exist

(SELECT CUSTOMER_NAME FROM CUSTOMER)



7.2 不要以字符格式声明数字,要以数字格式声明字符值。(日期同样)否则会使索引无效,产生全表扫描。

例子使用:

SELECT emp.ename, emp.job FROM emp WHEREemp.empno = 7369;

不要使用:SELECT emp.ename, emp.job FROM emp WHERE emp.empno = ‘7369’



8.对Select语句的法则

在应用程序、包和过程中限制使用select * from table这种方式。看下面例子

使用SELECT empno,ename,category FROM emp WHERE empno = '7369‘

而不要使用SELECT * FROM emp WHERE empno = '7369'



9. 排序

避免使用耗费资源的操作,带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎 执行,耗费资源的排序(SORT)功能. DISTINCT需要一次排序操作, 而其他的至少需要执行两次排序

10.临时表

慎重使用临时表可以极大的提高系统性能
分享到:
评论

相关推荐

    ORACLE-SQL性能优化大全.pdf

    ### ORACLE-SQL性能优化大全知识点详述 #### 一、优化基础知识概述 - **性能管理**: - **尽早开始**:性能优化应该在项目的早期就开始考虑,而不是等到后期出现性能瓶颈时才去处理。 - **设立合适目标**:设定...

    高手详解SQL性能优化十条经验

    本文将深入探讨高手们在实践中总结的十条SQL性能优化经验。 1. **避免模糊匹配**:使用LIKE '%parm1%'可能导致索引失效,降低查询效率。解决方法可以是改进前端程序,提供下拉列表限制输入范围,或在后台先筛选出...

    ORACLE-SQL性能优化(这个很全的).ppt

    ORACLE-SQL性能优化(这个很全的).ppt

    T-Sql编程性能优化

    根据提供的标题、描述以及部分文档内容,我们可以提炼出与"T-Sql编程性能优化"相关的多个关键知识点。以下是对这些知识点的详细阐述: ### T-Sql编程性能优化 #### 概述 T-SQL(Transact-SQL)是Microsoft SQL ...

    T-SQL性能调优秘笈 基于SQL Server 2012窗口函数

    由于提供的文件信息中,大部分内容是关于PDF电子书资料下载的广告信息,并非关于“T-SQL性能调优秘笈 基于SQL Server 2012窗口函数”的内容,因此在不违反您的要求的前提下,这部分广告信息不会被转化为知识点。...

    ORACLE培训--sql性能优化(老方块内部培训班使用)

    课程主要讨论:SQL语句执行的过程、ORACLE优化器 ,表之间的关联,如何得到SQL执行计划,如何分析执行计划等内容,从而由浅到深的方式了解SQL优化的过 程,使大家逐步掌握SQL优化。目录: 优化基础知识 性能调整...

    Microsoft_SQL_Server_2005技术内幕:T-SQL查询.pdf

     本书适合于需要编写或检查T-SQL代码的有经验的T-SQL程序员和数据库专业人员。读者可从中学到大量精湛的技巧,这些技巧会充实您的工具箱和编码技能,并让您顺利地开发出高效的解决方案。 作者简介 Itzik Ben-Gan是...

    SQL性能优化专题分享

    - 这一部分是整个分享的主题,强调了性能优化在SQL编程中的重要性。性能优化是保证数据库能够高效运行的关键步骤,尤其是在大型数据库系统中,它直接影响到业务的响应时间、系统的可扩展性以及数据库的整体效率。 ...

    老方块ORACLE SQL性能优化(全)教学PPT

    性能管理 性能问题 调整的方法 SQL优化机制 应用的调整 SQL语句的处理过程 共享SQL区域 SQL语句处理的阶段 共享游标 SQL编码标准 Oracle 优化器介绍 SQL Tunning Tips 优化Tools

    Sql Server——Sql性能优化

    Sql Server——Sql性能优化Sql Server——Sql性能优化Sql Server——Sql性能优化Sql Server——Sql性能优化Sql Server——Sql性能优化Sql Server——Sql性能优化Sql Server——Sql性能优化Sql Server——Sql性能优化

    sql 性能优化文档下载

    提供的文档如"ORACLE性能优化.doc"、"oracle_sql性能优化.doc"、"ORACLE_SQL性能优化系列.pdf"、"Oracle_SQL性能优化.ppt"等,应包含更多具体案例和实战经验,帮助读者深入理解并掌握这些技巧。

    Transact-SQL权威指南

    本书旨在帮助读者掌握T-SQL的高级技巧,优化性能,并利用其强大的功能进行复杂的数据处理。 在Transact-SQL中,性能协调是至关重要的,因为SQL查询的效率直接影响到数据库系统的整体性能。性能优化通常涉及查询优化...

    ORACLE_SQL性能优化(全).ppt

    综上,Oracle SQL性能优化是一个涉及广泛领域的复杂过程,要求开发人员具备深厚的数据库理论知识和实践经验。通过深入理解SQL处理过程、优化器工作原理以及执行计划分析,可以有效地提高SQL执行效率,进而提升整个...

    SQL性能优化调整.ppt

    《SQL性能优化调整》 SQL性能优化是数据库管理中至关重要的一环,特别是在Oracle数据库系统中。Oracle数据库在处理SQL查询时有一套详细的执行步骤,旨在提高查询效率和系统整体性能。 1. **编译阶段**: - **共享...

    sql性能优化十大要素(英文)

    本文档《sql性能优化十大要素》详细介绍了在DB2环境下,如何优化SQL语句的性能。文档作者是Sheryl M. Larsen,通过十条具体建议来实现SQL的高效执行,这些要素对于数据库管理员(DBA)、开发人员,以及任何使用关系...

    oracle培训sql性能优化ppt

    【Oracle SQL性能优化】是数据库管理员和开发人员关注的核心议题,尤其在大型企业级应用中,高效的SQL查询对于系统的响应时间和并发性至关重要。本PPT深入探讨了Oracle SQL优化的各种方面,旨在帮助读者理解SQL执行...

    sql性能优化

    sql性能优化、sql性能优化、sql性能优化、sql性能优化

    收获,不止SQL优化--抓住SQL的本质1

    案例分析与实战经验分享 - **实战案例**:书中提供了丰富的实战案例,覆盖了多种场景下的SQL优化实践。 - **代码示例**:每个章节都有详细的代码示例,帮助读者理解具体的操作步骤和技术细节。 - **分类汇总**:...

    DB2 SQL性能调优秘笈

    ### DB2 SQL性能调优秘笈 在数据库领域,IBM DB2因其稳定性和高效性而备受推崇,尤其是在大型企业级应用中。对于DB2数据库管理员(DBA)来说,掌握有效的SQL性能调优技巧至关重要。这不仅能提升系统的响应速度,还...

    JAVA\ORACLE_SQL性能优化(全).ppt

    【SQL性能优化基础】 在Java或Oracle SQL性能优化中,首要任务是对SQL语句有深入的理解,以便在编程时能够写出高效运行的代码。优化基础知识包括性能管理、SQL优化机制和应用调整等。 1. **性能管理** - **尽早...

Global site tag (gtag.js) - Google Analytics