`
mouer
  • 浏览: 101954 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[总结]sql优化

阅读更多

最近操作mysql(InnoDB),需要从大数据量(1000W+)条数据中,挑选出某一字段在一个集合内的数据,然后删除,写出的sql语句为:

delete from xxx where xx in (select xxx from ......);

删除速度极慢..无法忍受的地步..可能是in语句造成全表扫描了..

网上查了下,发现 一般来说insert>update>delete

因为delete写 rollback segement(回滚段信息) 比较多..造成速度慢..

最优化处理方式

1、把需要保留的数据根据条件导出到临时表

2、TRUNCATE

3、重建表,从导入临时表数据

-----------------------------------------------------------

以下为转帖

-----------------------------------------------------------

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数据库)

分享到:
评论

相关推荐

    某公司内部总结sql优化方法

    在SQL优化领域,提高查询效率是数据库管理员和开发人员的核心任务。以下是一些关键的SQL优化方法,这些方法可以从标题和描述中提炼出来,并且在实际工作中非常实用: 1. **子查询优化**: 当使用子查询时,将查询...

    SQL优化经验总结

    标题和描述概述的是关于SQL优化的经验总结,强调了SQL对程序处理速度的重要影响。下面将详细阐述这些关键的SQL优化技巧: ### SQL优化经验总结 #### 1. 选择最有效的表名顺序 在基于规则的优化器中,Oracle解析器...

    sql优化经验总结

    通过阅读"sql优化经验总结V1.5.ppt"和"sql优化经验总结.ppt",可以更深入地学习到更多实用技巧和案例分析,进一步提升在Oracle SQL优化方面的能力。不断学习和实践,才能在这个领域取得更大的成就。

    收获不止SQL优化

    第2章 风驰电掣——有效缩短SQL优化过程 24 2.1 SQL调优时间都去哪儿了 25 2.1.1 不善于批处理频频忙交互 25 2.1.2 无法抓住主要矛盾瞎折腾 25 2.1.3 未能明确需求目标白费劲 26 2.1.4 没有分析操作难度乱调优...

    数据库SQL优化大总结之 百万级数据库优化方案.pdf

    数据库SQL优化大总结之百万级数据库优化方案 本文总结了数据库SQL优化的十一个重要知识点,以帮助开发者提高SQL查询效率,避免全表扫描。 一、数据库SQL优化之索引优化 1. 在where及order by涉及的列上建立索引,...

    SQL优化总结,很实用

    以下是对SQL优化的总结,主要聚焦于Oracle数据库的SQL语句调优。 1. **理解执行计划**:优化SQL的第一步是理解查询的执行计划。Oracle的`EXPLAIN PLAN`可以展示SQL执行的步骤,包括表扫描方式、连接顺序、索引使用...

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

    - **全书总结**:本书不仅是一本关于SQL优化的技术书籍,更是引导读者进入SQL优化世界的指南。通过丰富的案例、实战经验和深入的技术探讨,帮助读者建立起从宏观到微观的优化思路,并最终达到“爽”的境界。 - **...

    【整理】数据库面试题索引sql优化+数据库SQL优化总结之百万级数据库优化

    接下来,"数据库SQL优化总结之百万级数据库优化.pdf"可能深入到实际的优化实践。 1. **数据库架构设计**:在百万级数据量下,合理的设计能避免性能瓶颈,如垂直分割、水平分割,以及读写分离策略。 2. **缓存与...

    SQL优化经验总结34条

    ### SQL优化经验总结34条深度解读 #### (1) 最优表名顺序:提升查询效率 在基于规则的优化器中,Oracle按照从右至左的顺序处理FROM子句中的表名。为了提高查询效率,应将记录条数最少的表置于FROM子句的最后,作为...

    sql语句优化总结PPT

    sql语句优化PPT,总结基本常见的,自己总结的

    mysql数据库sql优化

    ### MySQL数据库SQL优化 #### 一、SQL优化 在MySQL数据库管理中,SQL查询的性能直接影响到系统的响应时间和资源消耗。通过合理的SQL优化,可以显著提高数据处理速度,降低服务器负载,提升用户体验。 ##### 1.1 ...

    SQL语句优化总结

    SQL语句优化是一项重要的数据库管理技能,能够显著提高数据库查询性能,减少资源消耗,缩短响应时间。以下是对上述文件内容中提及的关键知识点的详细总结: 1. 选择最有效的表名顺序 在使用基于规则的优化器时,...

    基于SQL Server的SQL优化.pdf

    总结,SQL Server的SQL优化涉及多个层面,包括但不限于查询设计、索引策略、存储过程优化、执行计划分析、资源管理和数据库设计。理解并掌握这些知识,能够有效地提升SQL Server的性能,确保数据处理的高效性和可靠...

    SQL优化经验总结34条.pdf

    ### SQL优化经验总结34条 #### 一、选择最有效率的表名顺序 - **要点**: 在基于规则的优化器(RBO)中,Oracle解析器从右至左处理FROM子句中的表名。为了提高性能,应将记录条数最少的表放在最后,即作为基础表。...

    SQL Server SQL优化

    ### SQL Server SQL优化 #### 一、SQL优化的重要性与原则 在SQL Server的实际运行过程中,随着数据量的增长和用户访问频率的提升,数据库性能问题逐渐显现。根据所谓的“二八法则”,即大约20%的慢查询消耗了系统...

    sql优化规则详解(一些小总结)

    SQL优化是提升数据库性能的关键步骤,它涉及到对SQL语句的结构、执行顺序以及数据库设计的深入理解。以下是对标题和描述中所述知识点的详细解释: 1. **选择最有效的表名顺序**:在FROM子句中,Oracle解析器遵循从...

    sql 优化个人总结

    sql优化总结,对sql 优化在实战中对于sql优化的浅显理解,大神勿喷。

    sql优化经验总结V.ppt.ppt

    SQL 优化

    Oracle SQL优化

    ### Oracle SQL优化技术详解 #### 一、SQL语句优化的重要性及原则 ##### 1.1 SQL语句优化的重要性 在数据库系统中,SQL(Structured Query Language)是用于管理关系数据库的标准语言。随着数据量的增长和技术的...

Global site tag (gtag.js) - Google Analytics