`

SQL性能优化-持续更新中。。。。。。

    博客分类:
  • SQL
阅读更多
1 通过ROWID访问表--索引
你可以采用基于ROWID的访问方式情况,提高访问表的效率, , ROWID包含了表中记录的物理位置信息..ORACLE采用索引(INDEX)实现了数据和存放数据的物理位置(ROWID)之间的联系. 通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高.

2 共享SQL语句--相同的sql放入缓存

3 选择最有效率的表名顺序(只在基于规则的优化器中有效)  最右边的表作为基础表(记录最少,效率最高)
ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理. 在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.当ORACLE处理多个表时, 会运用排序及合并的方式连接它们.首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行派序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并.
例如:
表 TAB1 16,384 条记录
表 TAB2 1 条记录

选择TAB2作为基础表 (最好的方法)
select count(*) from tab1,tab2 执行时间0.96秒

选择TAB2作为基础表 (不佳的方法)
select count(*) from tab2,tab1 执行时间26.09秒

如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表.
例如:
EMP表描述了LOCATION表和CATEGORY表的交集.
SELECT *
FROM LOCATION L ,
CATEGORY C,
EMP E
WHERE E.EMP_NO BETWEEN 1000 AND 2000
AND E.CAT_NO = C.CAT_NO
AND E.LOCN = L.LOCN
将比下列SQL更有效率
SELECT *
FROM EMP E ,
LOCATION L ,
CATEGORY C
WHERE E.CAT_NO = C.CAT_NO
AND E.LOCN = L.LOCN
AND E.EMP_NO BETWEEN 1000 AND 2000

4. WHERE子句中的连接顺序.
ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.

5 用EXPLAIN PLAN 分析SQL语句
EXPLAIN PLAN 是一个很好的分析SQL语句的工具,它甚至可以在不执行SQL的情况下分析语句. 通过分析,我们就可以知道ORACLE是怎么样连接表,使用什么方式扫描表(索引扫描或全表扫描)以及使用到的索引名称.

6.分页sql
一般的分页sql如下所示:
sql1:select * from (select t.*,rownum rn from XXX t)where rn>0 and rn <10;
sql2:select * from (select t.*,rownum rn from XXX t where rownum <10)where rn>0;
乍看一下没什么区别,实际上区别很大...125万条数据测试,
sql1平均需要1.25秒(咋这么准呢? )
sql2平均需要... 0.07秒
原因在于,子查询中,sql2排除了10以外的所有数据
当然了,如果查询最后10条,那效率是一样的

7.多Exists,少in
Exists只检查存在性,性能比in强很多,有些朋友不会用Exists,就举个例子
例,想要得到有电话号码的人的基本信息,table2有冗余信息
select * from table1;--(id,name,age)
select * from table2;--(id,phone)
in:
select * from table1 t1 where t1.id in (select t2.id from table2 t2 where t1.id=t2.id);
Exists:
select * from table1 t1 where Exists (select 1 from table2 t2 where t1.id=t2.id);

(补充内容)用in的朋友注意了,当参数超过1000个,数据库就挂了。(oracle 10g数据库)

8.少用*
很多朋友很喜欢用*,比如:select * from XXX;
一般来说,并不需要所有的数据,只需要一些,有的仅仅需要1个2个,
拿5W的数据量,10个属性来测试:
(这里的时间指的是PL/SQL Developer显示所有数据的时间)
使用select * from XXX;平均需要20秒,
使用select column1,column2 from XXX;平均需要12秒
(我的机子不是很好。。。)
对于开发来说,这一条是个灾难,知道是一回事,做就是另一回事了

9 一些查询往往会联接十几张甚至几十张表

应用设计的时候对这样的查询要很慎重。如果表格很大,十几张表做联接,肯定不会有好的性能。如果应用是支持数据分析系统,那可能还好。如果应用是一个OLTP系统(要求很快返回结果),这样的设计失败的风险可能会很大。有时候可能需要降低数据库范式级别,多保存一些冗余数据列,以减少表格联接的数量

10 慎用distinct关键字

distinct在查询一个字段或者很少字段的情况下使用,会避免重复数据的出现,给查询带来优化效果。

但是查询字段很多的情况下使用,则会大大降低查询效率。因为当查询很多字段时,如果使用distinct,数据库引擎就会对数据进行比较,过滤掉重复数据,然而这个比较,过滤的过程则会毫不客气的占用系统资源,cpu时间。

11 like

去掉前置百分号。like语句会因为前置百分号而无法使用索引

12 使用存储过程

可以考虑使用存储过程封装那些复杂的SQL语句或商业逻辑,这样做有几个好处。
一是存储过程的执行计划可以被缓存在内存中较长时间,减少了重新编译的时间。
二是存储过程减少了客户端和服务器的繁复交互。
三是如果程序发布后需要做某些改变你可以直接修改存储过程而不用修改程序,避免需要重新安装部署程序。

13 复杂sql

对于非常复杂的sql(特别是有多层嵌套,带子句或相关查询的),应该先考虑是否设计不当引起的。对于一些复杂SQL可以考虑使用程序实现。

14 避免In子句

使用In 或 not In子句时,特别是当子句中有多个值时,且查询数据表数据较多时,速度会明显下降。可以采用连接查询或外连接查询来提高性能。

15 批量插入数据   insert into  select  提高性能

16 sys_guid()  ,sysdate,序列sequence

17 上亿数据量数据库优化

避免全表扫描,使用存储过程,建立临时表,其他一些查询条件调优不赘述
7
5
分享到:
评论
1 楼 kingcs 2015-03-27  
very good  

相关推荐

    高性能SQL优化--个人项目开发中总结

    在IT领域,数据库性能优化是确保系统高效运行的关键环节,特别是在处理大规模数据时。本文将主要探讨Oracle数据库的SQL优化,这是性能管理的重要组成部分。Oracle性能管理分为主动和被动两种类型。主动性能管理强调...

    ORACLE-SQL性能优化大全.pdf

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

    flume-ng-sql-source-1.5.2

    - **并发与性能**:源码中可能包含对并发查询的支持,以提高数据摄取速度,同时可能有优化策略来平衡资源消耗和性能。 3. **SQL集成**: - **数据库兼容性**:Flume-ng-sql-source通常需要JDBC驱动来连接各种类型...

    x-pack-sql-jdbc-7.4.2

    三、性能优化 X-Pack SQL JDBC 7.4.2版本在性能方面进行了优化。它能够智能地处理大数据量的查询,利用Elasticsearch的分布式特性和索引结构,快速执行复杂的查询操作。此外,它还支持批处理操作,提高了数据导入和...

    sql 性能优化文档下载

    在IT行业中,SQL性能优化是数据库管理的关键环节,它直接影响到系统的响应速度和整体效率。以下将详细讨论SQL性能优化的一些关键知识点,结合提供的文件名,我们主要关注Oracle数据库的相关内容。 1. **理解SQL语句...

    sql2005性能sql 性能优化

    在实践中,SQL Server 2005性能优化是一个持续的过程,需要结合具体业务需求和系统负载,不断调整和优化。通过上述方法,可以有效地提升SQL Server 2005的运行效率,为企业的数据处理提供强大的支撑。

    ORACLE_SQL性能优化(全).ppt

    【Oracle SQL性能优化】 Oracle SQL性能优化是数据库开发人员必须掌握的关键技能,它涉及到SQL语句的编写、执行过程、优化器的选择以及执行计划的分析等多个方面。在Oracle数据库环境中,优化SQL性能对于提升系统...

    Microsoft SQL Server 性能调校 -- 源代码

    在IT领域,数据库管理系统是企业数据存储和处理的核心,而Microsoft SQL Server作为一款广泛应用的关系型...通过深入学习这些源代码,可以更直观地理解性能优化的实现细节,并将这些知识应用于实际的SQL Server环境中。

    SQL 性能优化工具

    SQL性能优化是一个重要的主题,尤其是在使用像SQL Server 2000这样的早期版本时,由于资源有限,优化显得更为关键。本系列课程主要关注通过理解并应用锁和事务管理来提升SQL查询的效率。 首先,我们要了解【锁和锁...

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

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

    oracle培训sql性能优化ppt

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

    MySQL性能优化 SQL优化方法技巧

    ### MySQL性能优化与SQL优化方法技巧 #### 一、引言 MySQL作为一款广泛使用的开源关系型数据库管理系统,其性能优化对于确保应用系统的稳定性和高效运行至关重要。通过对MySQL的优化,不仅能提升系统的响应速度,还...

    优化-SQL性能优化建议.pdf

    在IT领域,数据库性能是...以上是SQL性能优化的一些基本建议,实际应用中还需要结合具体业务场景和数据库类型进行针对性调整。在优化过程中,应持续监控数据库性能,以便及时发现并解决问题,确保系统的高效稳定运行。

    mysql-sql优化-小米开源-soar

    6. **部署与监控**:在生产环境中部署优化后的SQL,并持续使用SOAR进行监控,确保SQL性能持续优化。 小米开源的SOAR因其开源、免费和高效的特点,受到了许多企业和开发者的欢迎。通过掌握和运用SOAR,可以显著提高...

    sql server性能优化总结

    以上就是对SQL Server性能优化的一些核心要点,实践中应结合具体业务场景灵活运用,持续监控和调整,以达到最佳性能。文件"sql server性能优化.doc"和"SQL SERVER中一些常见性能问题的总结.htm"可能包含了更详细的...

    sql server 性能优化(生产中常用)

    以下是从提供的文件内容中提取的SQL Server性能优化的关键知识点。 1. SQL效率查看方法 在进行性能优化之前,首先需要了解如何查看SQL语句的执行效率。通过查询选项中的“执行-高级”并勾选相应的选项,可以在消息...

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

    ### T-SQL性能调优秘笈 #### 一、T-SQL与SQL Server 2012 - **T-SQL简介**:T-SQL是Transact-SQL的简称,它是微软SQL Server数据库管理系统所使用的SQL方言,是一种用于管理SQL Server数据库的标准语言。 - **SQL ...

    使用flink-connector-sqlserver-cdc 2.3.0把数据从SQL Server实时同步到MySQL中

    5. **性能优化**: - 考虑调整Flink作业的并行度、批处理窗口大小、缓冲区设置等参数,以优化性能。 - 监控SQL Server和MySQL的资源使用情况,避免因数据同步导致的性能瓶颈。 6. **扩展与维护**: - 如果有多个...

    Oracle SQL 性能优化培训教材--面向程序员

    Oracle SQL 性能优化是数据库管理系统中的一个关键领域,尤其是对于程序员来说,理解并掌握这一技术可以极大地提高应用程序的运行...记住,SQL性能优化是一个持续的过程,不断监测、分析和调整是提升数据库性能的关键。

Global site tag (gtag.js) - Google Analytics