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

sql语句优化总结

阅读更多
先前一直对sql语句优化没有太在乎,最近网站用户量增加,发现数据库压力很大自己写的语句啊,新来的架构师对我们语句一一优化,我总结如下(不断更新。。。)
(1)

优化前的语句:
# Query_time: 5.967435 Lock_time: 0.000129 Rows_sent: 1 Rows_examined: 803401 
SET timestamp=1286843575; 
select livemessag0_.id as id38_, livemessag0_.isactive as isactive38_, livemessag0_.content as content38_, livemessag0_.createtime as createtime38_, livemessag0_.userid as userid38_, livemessag0_.objectid as objectid38_, livemessag0_.recordid as recordid38_, livemessag0_.type as type38_ from live_message livemessag0_ where (livemessag0_.objectid in (select livescrip1_.id from live_scrip livescrip1_ where livescrip1_.senderid='ff8080812aebac2d012aef6491b3666d')) and livemessag0_.type=2 limit 6; 

优化后的语句:
select livemessag0_.id as id38_,
        livemessag0_.isactive as isactive38_,
        livemessag0_.content as content38_,
        livemessag0_.createtime as createtime38_,
        livemessag0_.userid as userid38_,
        livemessag0_.objectid as objectid38_,
        livemessag0_.recordid as recordid38_,
        livemessag0_.type as type38_
 from live_scrip livescrip1_ left join 
  live_message livemessag0_
  on livescrip1_.id=livemessag0_.objectid
  where livescrip1_.senderid = 'ff8080812aebac2d012aef6491b3666d' and
       livemessag0_.type = 2
 limit 6;

总结:尽量少用子查询用表连接的方式代替(如果表连接不是太复杂的话),这样优化后大概能减少1/3的时间,后来发现livemessag0_.objectid竟然没有建立索引,晕菜
(2)

优化前的慢查询:
SELECT r1.id,r1.username,r1.nickname,r1.img_name,r1.datecreated FROM acegi_users AS r1 JOIN (SELECT ROUND(RAND() *(SELECT MAX(num_id) FROM acegi_users)) AS id) AS r2 WHERE r1.num_id >= r2.id and r1.id not in(select r.user_id from user_relations r where r.relation_user_id='ff8080812ad5ad7f012ad5aee5150005') and r1.id!='ff8080812ad5ad7f012ad5aee5150005' and r1.role='expert' ORDER BY r1.num_id limit 3; 

优化后的sql:
SELECT r1.id,
       r1.username,
       r1.nickname,
       r1.img_name,
       r1.datecreated
FROM acegi_users AS r1
     JOIN 
     (SELECT ROUND(RAND() *(SELECT MAX(num_id) FROM acegi_users)) AS id) AS r2
WHERE r1.num_id >= r2.id 

and
       not EXISTS (select r0.user_id from (select r.user_id from user_relations r where
       r.relation_user_id = 'ff8080812ad5ad7f012ad5aee5150005' union select 'ff8080812ad5ad7f012ad5aee5150005') r0 where r0.user_id=r1.id) 
      and
      r1.role = 'expert'
ORDER BY r1.num_id
limit 3;

总结:少用not in 用not EXISTS代替之
分享到:
评论

相关推荐

    SQL语句优化总结

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

    SQL语句优化总结34条

    以下是对标题"SQL语句优化总结34条"中提到的一些重要知识点的详细解释: 1. **选择最有效的表名顺序**:在ORACLE中,FROM子句中的表处理顺序是从右到左,因此基础表(记录条数最少的表或交叉表)应放在最后,以减少...

    ORACLE SQL语句优化总结

    【ORACLE SQL语句优化总结】 在Oracle数据库中,SQL语句的优化是提升系统性能的关键环节。以下是一些常见的优化策略: 1)选择最有效的表名顺序:Oracle的解析器按照FROM子句中表的右到左顺序处理,基础表...

    Oracle Sql语句优化总结.doc

    Oracle SQL语句优化是提高数据库性能的关键,以下是对给定文件内容的详细解释和扩展: 1. **选择最有效率的表名顺序**:在FROM子句中,表的处理顺序是从右到左,基础表(记录条数最少的表)先被处理。在多表连接...

    SQL语句优化手册

    ### SQL语句优化手册 #### 一、引言 随着信息技术的发展,数据库系统在各行业中扮演着越来越重要的角色。为了确保数据库系统能够高效地运行,SQL语句优化成为了提升系统性能的关键因素之一。SQL(Structured Query...

    SQL语句优化方法30例

    在 SQL 语句优化过程中,我们经常会用到 hint,今天我们将总结一下在 SQL 优化过程中常见 Oracle HINT 的用法。 1. /*+ALL_ROWS*/:该 hint 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小...

    通过分析SQL语句的执行计划优化SQL(总结)

    这篇博客"通过分析SQL语句的执行计划优化SQL(总结)"深入探讨了这一主题,下面将对其中的主要知识点进行详细阐述。 1. **执行计划的理解**: 执行计划是数据库管理系统在执行SQL语句之前预先生成的一种详细步骤,它...

    oracle的SQL语句调优总结

    oracle的SQL语句调优总结,Oracle语句优化53个规则详解。

    ORACLE数据库SQL语句编写优化总结.rar

    2. **SQL语句优化技巧**: - **选择适当的WHERE子句**:使用索引来提高查询速度,避免全表扫描。 - **使用绑定变量**:避免SQL注入,提高执行计划的重用率。 - **减少数据访问**:精确选择需要的列,避免SELECT *...

    sql语句的优化

    ### SQL语句优化详解 #### 一、引言 在数据库设计与管理中,SQL语句的优化是一项至关重要的工作。合理的SQL优化不仅能显著提升数据处理速度,还能有效降低服务器资源消耗,从而提高整个系统的响应时间和用户体验。...

    sql语句优化方法总结

    sql语句优化

    索引的SQL语句优化

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

    SQL语句编写优化和基本原理总结

    ### SQL语句编写优化与基本原理深度解析 #### 引言 SQL语句编写优化是数据库性能提升的关键一环,特别是在大数据量...希望本文提供的知识点能够帮助读者在实际工作中更好地应用SQL语句优化策略,提升数据库管理能力。

    一般SQL语句优化整理

    本文将对一些常见的SQL语句优化技巧进行总结整理,帮助开发人员养成良好的SQL编写习惯。 #### SQL语句优化要点 ### 1. EXISTS与NOT EXISTS的使用 - **应用场景**:当需要检查某个记录是否存在时,可以考虑使用`...

    SQL语句优化方法分析与探讨.pdf

    文章《SQL语句优化方法分析与探讨》中,作者详细阐述了SQL语句优化的五大方面:定位、分析、调整、优化和技巧。这些方法都来源于实际应用过程中的探索和总结,目的是为了帮助开发者和数据库管理员更有效地优化SQL...

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

    总结来说,Oracle数据库的SQL语句优化是一项复杂而系统的工作,需要数据库管理员具备深厚的理论知识和丰富的实践经验。通过对SQL语句的优化,可以确保数据库系统的高效运行,提高应用程序的性能,最终提升整个企业的...

    Oracle——sql语句优化

    ### Oracle SQL语句优化策略详解 #### 操作符优化概览 在Oracle数据库环境中,SQL语句的优化是提升查询效率、减少系统资源消耗的关键环节。通过对特定操作符的合理运用,可以显著改善数据检索的速度与准确性。本文...

    ORACLE数据库SQL语句编写优化总结

    总结以上内容,ORACLE数据库SQL语句的编写优化涉及多方面知识,包括优化器的合理选择、高效的表访问方法、共享SQL语句的使用、索引的正确配置和应用、SQL内部操作的处理以及低效SQL语句的识别与优化等。在实际操作中...

Global site tag (gtag.js) - Google Analytics