`

sql语句优化原则

阅读更多
1.多where,少having
where用来过滤行,having用来过滤组

2.多union all,少union
union删除了重复的行,因此花费了一些时间

3.多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);

4.使用绑定变量
Oracle数据库软件会缓存已经执行的sql语句,复用该语句可以减少执行时间。
复用是有条件的,sql语句必须相同
问:怎样算不同?
答:随便什么不同都算不同,不管什么空格啊,大小写什么的,都是不同的
想要复用语句,建议使用PreparedStatement
将语句写成如下形式:
insert into XXX(pk_id,column1) values(?,?);
update XXX set column1=? where pk_id=?;
delete from XXX where pk_id=?;
select pk_id,column1 from XXX where pk_id=?;

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

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.能用一句sql,千万别用2句sql
不解释
(补充内容)
第6条指的是是oracle数据库。
第7条本来不准备解释的,也有这么多质疑的,说明追寻真理的朋友还是相当多的。
我认为数据库当掉确实很有可能,我没想到是我的问题。

以上各条只针对sql如何优化,至于开发效率低,可读性等等,并不在考虑范围内

(补充内容2)第6条,如果有分页需要排序,必须再包一层,结果为
select * from (select t.*, rownum rn from (select * from XXX order by value desc) t where rownum <= 10 ) where rn > 0;

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


转自:http://www.javaeye.com/topic/661001
分享到:
评论

相关推荐

    SQL语句优化原则.pdf

    具体来说,有几个重要的SQL语句优化原则需要掌握和理解: 1. 判断空值(NULL)与索引的使用。在数据库中,包含NULL值的列不会被索引。因此,在where子句中使用ISNULL或ISNOTNULL条件时,优化器将不会使用索引,而是...

    SQL语句优化原则

    ### SQL语句优化原则 在IT领域中,数据库性能优化是一项极为重要的工作,而SQL查询作为数据检索的主要手段,其优化对于提升整个系统的响应速度和处理能力至关重要。下面将详细介绍SQL查询条件优化的30条原则,帮助...

    优化数据库的方法及SQL语句优化的原则

    #### 二、SQL语句优化原则 1. **使用WHERE子句过滤数据**: - 尽早进行数据过滤可以减少后续操作的数据量。 - 优先考虑使用索引字段进行过滤。 2. **避免使用IS NULL和IS NOT NULL**: - 在WHERE子句中使用这些...

    sql语句性能调整原则

    以下是一些重要的SQL语句优化原则: 1. **避免使用NULL值**:在数据库设计中,应尽量避免使用NULL,因为NULL值在索引中无法被利用。含有NULL值的列在进行查询时,优化器不会使用到包含NULL的索引,这可能导致全表...

    Oracle数据库的SQL语句优化 (1).pdf

    #### SQL语句优化原则 - 减少资源消耗:优化的目的在于减少CPU、内存、磁盘I/O等资源的消耗。 - 缩短响应时间:优化后的语句应能够提高响应速度,缩短用户等待时间。 - 数据访问模式优化:优化数据的读写方式,减少...

    SQL语句优化的原则

    以下是对标题“SQL语句优化的原则”及描述中所提及知识点的详细解释: 1. **使用索引来优化查询**: - 非群集索引是默认的索引类型,但在某些情况下,群集索引可能更适合。群集索引决定了数据的物理存储顺序,适用...

    优化数据库的思想及SQL语句优化的原则

    本文将深入探讨优化数据库的思想以及SQL语句优化的原则。 一、优化数据库的思想 1. 数据库设计:良好的数据库设计是优化的基础。应遵循第一范式(1NF)、第二范式(2NF)和第三范式(3NF),减少冗余数据,确保...

    sql server 语句优化

    ### SQL Server 语句优化详解 #### 一、引言 在现代企业级应用中,数据库性能直接影响到系统的响应速度和服务质量。对于SQL Server这样的关系型数据库管理系统而言,语句优化是提高查询效率的关键手段之一。本文将...

    索引的SQL语句优化

    ### 知识点详解:“索引的SQL语句优化” #### 重要性 在数据库管理中,SQL(Structured Query Language)语句的优化是确保系统高效运行的关键环节。特别是在大型数据库环境中,一次低效的SQL查询可能会导致整个...

    JAVA-SQL语句优化.doc

    总之,SQL语句优化是提升数据库性能的关键。了解并遵循上述原则,可以编写出更加高效的SQL,从而提高系统整体的响应速度和可用性。在实际开发中,应不断学习和实践,以适应不同场景下的性能需求。

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

    为了保证SQL语句优化的有效性,以下几点是必须要遵守的原则: - 数据库访问代码要集中维护,以统一进行性能监控和调整。 - 定期测试数据库性能,并根据性能监控数据调整优化策略。 - 保证优化措施的可回滚性,...

    Oracle高效SQL语句原则

    3. 任何在 where 子句中使用 is null 或 is not null 的语句优化器是不允许使用索引的 Oracle database 的优化器在遇到 is null 或 is not null 条件时,不会使用索引,这可能会导致 SQL 语句的执行效率下降。 4....

    Oracle数据库的SQL语句优化.pdf

    本文将对Oracle数据库中的SQL语句优化进行深入探讨,分析其优化目的和原则,并通过实例介绍一些优化方法。 首先,优化应用程序中SQL语句的必要性十分明显。SQL语句是对数据库中的数据进行操作的唯一途径,应用程序...

    sql语句优化,提高查询性能

    以下是一些关于SQL语句优化的重要原则和技巧: 1. **限制性条件的位置**:在`WHERE`子句中,应将最能限制结果集大小的条件放在最前面。例如,如果`field1`的值都大于等于0,那么`field1&gt;=0 and field1的查询效率会...

    SQL语句优化

    优化数据库、SQL语句优化的原则、不要以为只有SELECT语句是查询。实际上,带有任何WHERE条件的 DML(INSERT、UPDATE、DELETE)语句中都包含查询要求,在后面的文章中,当说到查询时,不一定只是指SELECT语句,也有可能...

    SQL语句优化.pdf

    SQL语句优化的首要原则是通过尽量少的磁盘访问来获取所需的数据。索引作为数据库中关键的数据结构,其主要目的是提高查询效率。正确合理地使用索引能够显著缩短系统的响应时间。 文章中提到了索引使用的问题,以及...

Global site tag (gtag.js) - Google Analytics