`
Everyday都不同
  • 浏览: 727153 次
  • 性别: Icon_minigender_1
  • 来自: 宇宙
社区版块
存档分类
最新评论

记录一个sql优化后大大提高查询效率的情形

阅读更多

众所周知,sql写得怎么样,对于查询效率的影响是颇大的。下面看一个比较普通的查询:

假设一张表有event_date和event_time2个字段分别表示日期和时间,现在直接给你一个时间字符串,这个时间字符串是“日期+时间”的组合,现在需要按时间范围过滤出一部分数据。如果你不转弯的话,很有可能你会按照惯性思维使用concat(event_date, event_time)连接函数,如:

SELECT A, MAX(B) AS B,SUBSTR(CONCAT(event_date, event_time),1,12)AS tran_time 
       FROM tablename 
            WHERE SUBSTR(CONCAT(event_date, event_time),1,12) >= :start_time  
            AND SUBSTR(CONCAT(event_date, event_time),1,12) < :end_time  
     AND A = :A  	
        GROUP BY A,tran_time  
        ORDER BY A,tran_time ASC

 start_time和end_time是传递过来的由“日期+时间”组合成的字符串。

这是比较容易想到的传统思维,但这种sql语句的查询效率老低了。差不多查一次需要4.5s+, 因为不仅仅需要用到max函数,还需按SUBSTR(CONCAT(event_date, event_time),1,12) 这个计算出来的字段group by,最主要的是在where语句里,对2个时间的字段需要进行多重函数运算后看看那些记录符合你所规定的时间范围~~  这样,在不知不觉中,造成了全表扫描,效率极低,特别是在表中数据量比较大的时候。

 

我们已经知道,如果一张表是数据量比较大的表,并且一般都用与于查询时,索引的使用会给我们带来极大的性能优化。考虑到使用索引,我们应该尽量避免where语句里的字段不进行函数作用(因为即使你对where下的字段建立了索引,但如果你对他们进行了函数运算,索引是失效的),所以我们考虑把它们尽量独立开来。

基于上述思想,改正如下:

先对A, evnet_date和event_time三个字段建立索引。

SELECT A, MAX(B) AS B,SUBSTR(CONCAT(event_date, event_time),1,12)AS tran_time 
       FROM tablename  
            WHERE event_date >= :start_date AND event_time >= :start_time  
       AND event_date <= :end_date AND event_time < :end_time   
     AND A = :A  	
        GROUP BY A,tran_time  
        ORDER BY A,tran_time ASC

 可以看出我们把event_date和event_time的起止时间都“拆”开来了,所以只需在传过来的起止时间字符串上截取响应的日期和时间字符串给sql语句即可。

测试检查发现,2句sql查询出的结果是一致的,说明他们是等效的。

改正之后,发现效率提升至0.05s左右,性能得到极大提升!!!

 

这句优化后的sql语句是突破了sql语句字段去适应外部传过来的时间字符串,而是从sql优化的角度看,让外部的条件去适应sql语句的查询,这种思想我之前很少有,也算是一种思维的突破了!

1
4
分享到:
评论

相关推荐

    Oracle提高SQL查询效率(SQL优化).doc

    Oracle 提高 SQL 查询效率(SQL 优化) 本文将详细介绍 Oracle 中提高 SQL 查询效率的技巧和策略,包括选择最有效率的表名顺序、WHERE 子句中的连接顺序、SELECT 子句中避免使用‘*’、减少访问数据库的次数、使用 ...

    SQL优化 SQL优化软件 SQL优化工具

    总的来说,SQL优化是一个系统性的工作,需要结合硬件配置、数据库设计、SQL编写等多个方面进行综合考虑。而借助专业的SQL优化工具,这个过程可以变得更加高效和精确,从而确保数据库系统的稳定和高效运行。

    运用数据库优化器提高SQL查询效率.pdf

    数据库优化器是数据库查询提供一个最优的执行策略,它可以大大提高SQL查询的效率。执行策略是执行查询所需的一系列步骤,数据库的反应速度经常体现在这个优化算法上。不同的查询策略和查询步骤可使服务器的反应不同...

    提升MYSQL查询效率的10个SQL语句优化技巧.doc

    使用 EXPLAIN 关键字是另一个 MySQL 优化技巧,可以让你了解 MySQL 正在进行什么样的查询操作,这可以帮助你发现瓶颈的所在,并显示出查询或表结构在哪里出了问题。EXPLAIN 查询的结果,可以告诉你那些索引正在被...

    Sql优化.ppt

    SQL 查询优化是数据库优化的重要部分,查询优化器是 SQL SERVER 中的一个组件,可以自动优化查询语句,提高查询效率。本文将详细介绍查询优化器的工作原理、SARG 的定义和应用、查询优化的 tips 等。 一、查询优化...

    优化sql查询速度

    在数据库管理与应用中,提高 SQL 查询的速度是非常重要的一个环节,它不仅能够提升系统的响应速度,还能有效降低服务器资源的消耗。以下是从标题、描述及部分给定内容中提炼出的关键知识点,这些内容将帮助我们深入...

    ORACLE 优化sql语句提高oracle执行效率 .doc

    ORACLE 优化 SQL 语句提高 Oracle 执行效率 Oracle 是一个功能强大的关系数据库管理系统,然而,如果不正确地使用 SQL 语句,可能会导致执行效率低下。为了提高 Oracle 的执行效率,需要遵循一些最佳实践。下面是...

    SQL_Server_2008查询性能优化

    在SQL Server 2008查询性能优化的主题中,我们主要关注如何提高SQL查询的速度,减少资源消耗,以及提升数据库的整体效率。对于那些已经具备基本SQL语法知识,并期望提升其代码执行性能的开发者来说,这是一个至关...

    sql查询效率

    这个优化器负责评估SQL语句的不同执行计划,并选择成本最低的那个执行。这里的“成本”通常指的是CPU时间、I/O操作或其他资源消耗指标。优化器通过分析查询语句中的WHERE子句来确定哪些数据需要被访问以及如何访问...

    提高Oracle中SQL的执行效率

    如果多个简单的查询之间没有关联,可以尝试将它们合并到一个查询中。这样可以减少数据库的访问次数,进而提高整体性能。 #### 8. 删除重复记录 使用ROWID来高效地删除重复记录。例如: ```sql DELETE FROM EMP E ...

    OracleSQL的优化.pdf

    Oracle SQL 优化 Oracle SQL 优化是数据库性能优化的关键部分。为了提高数据库的性能,我们需要从五个方面进行调整:去掉不必要的大型表...只有通过合理的优化,我们才能提高数据库的性能,提高 SQL 语句的执行效率。

    《基于Oracle的SQL优化》PDF版本下载.txt

    一个经过优化的SQL查询不仅能够减少资源消耗,提高系统性能,还能降低硬件成本,提升业务效率。 ### Oracle数据库的特点 Oracle是一款广泛应用于企业环境中的关系型数据库管理系统。它具有高度可扩展性、强大的...

    ORACLE优化SQL语句,提高效率

    ### ORACLE优化SQL语句,提高效率 在数据库管理和应用开发过程中,编写高效、性能优良的SQL语句是非常重要的一步。下面将详细解释如何优化Oracle中的SQL语句以提高其执行效率。 #### 1. 选择最有效率的表名顺序...

    sql优化书籍大全

    这四个原则贯穿于整个SQL优化过程,是提升查询效率的基础。 1. 减少查询次数:通过联合查询、子查询优化和存储过程等方式,将多次数据库交互合并为一次,降低网络传输和数据库处理的压力。 2. 减小数据量:通过...

    sql优化的几种方法

    当需要删除整个表中的所有记录时,使用TRUNCATE命令而非DELETE可以显著提高效率。这是因为TRUNCATE不保留任何可以恢复的数据,一旦执行完毕,数据无法恢复,因此消耗的资源更少,执行时间也更短。需要注意的是,...

    sql优化 策略

    总是使用索引的第一个列可以提高查询效率,因为数据库可以快速地利用索引来获取结果。 7. 用 UNION-ALL 替代 UNION 用 UNION-ALL 替代 UNION 可以提高查询效率,因为 UNION-ALL 操作可以减少数据库的计算量。 8. ...

    ORACLE-SQL性能优化大全.pdf

    - **评估执行计划**:验证优化后的SQL语句是否达到了预期效果。 - **SQL优化衡量指标**: - **系统响应时间**:衡量系统对用户请求的反应速度。 - **并发性**:系统同时处理多个请求的能力。 - **SQL优化案例**...

    SQL优化介绍 SQL优化介绍

    SQL优化是数据库管理中至关重要的一个环节,目的是提高SQL查询的效率,降低资源消耗,从而提升整个系统的性能。本文将详细介绍SQL优化的一些基本概念和技术。 首先,了解Oracle数据库的优化器模式。Oracle提供了三...

    优化sql语句执行效率几点注意事项

    在数据库管理中,SQL语句的执行效率是关键因素之一,尤其...总之,优化SQL语句执行效率是一个多方面的工作,需要结合具体业务场景,综合运用索引策略、SQL编写技巧、数据库配置和维护等手段,才能实现系统的高效运行。

Global site tag (gtag.js) - Google Analytics