众所周知,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语句的查询,这种思想我之前很少有,也算是一种思维的突破了!
相关推荐
sql查询优化 提高MySQL数据库查询效率的几个技巧
Oracle提高SQL查询效率(SQL优化)
优化sql,提高sql效率!适合有一定基础的人
查询sql优化查询 sql查询优化 查询优化sql查询优化 查询优化
SQL优化 SQL优化软件 SQL优化工具 很好用的工具,可以分析优化TSQL语句,oracle数据库语句优化工具
提升MYSQL查询效率的10个SQL语句优化技巧
SQL Server查询性能分析与查询效率提高.pdf
海量数据 优化 SQL海量数据 优化 SQL海量数据 优化 SQL海量数据 优化 SQL海量数据 优化 SQL海量数据 优化 SQL海量数据 优化 SQL海量数据 优化 SQL海量数据 优化 SQL海量数据 优化 SQL海量数据 优化 SQL海量数据 优化...
运用数据库优化器提高SQL查询效率.pdf
sql语句优化是软件开发最常用的方式,以提高性能的最佳办法!
如何提高SQL查询效率,写SQL注意的地方
SQL查询优化,进行适当的优化,运行速度有了明显地提高
使你的 SQL 语句完全优化,提高sql执行效率。
优化sql查询速度优化
sql优化指南 帮助你优化你的SQL语句 使你的程序效率大大提高
sql查询优化规则,左右连接,执行计划使用,以提高查询效率
sql查询优化总结
oracle数据库的性能优化直接关系到系统的运行效率,而影响数据库性能的一个重要因素就是sql性能问题。本书是作者十年磨一剑的成果之一,深入分析与解剖oracle sql优化与调优技术,主要内容包括: 第一篇“执行计划...
sql优化规则详解(一些小总结) 从sql语句的写法来描述如何提高效率
1. SQL优化 1 1.1. 优化实战 1 1.1.1. 策略1.尽量全值匹配 1 1.1.2. 策略2.最佳左前缀法则 2 1.1.3. 策略3.不在索引列上做任何操作 2 1.1.4. 策略4.范围条件放最后 3 1.1.5. 策略5.覆盖索引尽量用 3 1.1.6. 策略6.不...