SQL效率的几点心得

这几天一直在写SQL,有时候对比同样效果的SQL语句,可是查询所需要的时间有时候相差很多,下面总结遇到的几个点:

1、between   and

  在有些时候自己比较喜欢使用这个语句,因为可以通过把数据变成number型然后省去大于号小于号,比如比较常用的查询一个月的数据。

  

select * from table1
where  to_number(to_char(createdate,‘yyyymmdd‘)) between 20140901 and 20140930

--用于查询一个月的数据

  这样执行起来速度也还可以,但是比起下面的写法就有些差距了

1 select * from table1
2 where  to_number(to_char(createdate,‘yyyymmdd‘)) like ‘201409__‘
3
4 --用于查询一个月的数据

下面的写法,提升的查询效率至少是上面的两倍多

2、如果是number型数据的话就不要再用to_number()函数了,虽然浪费的效率不多,但是能省一点还是省一点的好

3、plsql中的null值

  通过几次查询,纠结了一个上午,才弄明白在plsql中当一个字段不等一个值的时候,这个值的外围是不包括null的,也就是说,这样的查询不会包含null值

4、善待left join ……on …… and

  虽然这样写也对,但是要注意这样的结果和把限制条件放在where后面之后的查询结果是有一定区别的

时间: 2024-10-13 00:20:17

SQL效率的几点心得的相关文章

index seek和index scan 提高sql 效率

index seek和index scan 提高sql 效率解释解释index seek和index scan:索引是一颗B树,index seek是查找从B树的根节点开始,一级一级找到目标行.index scan则是从左到右,把整个B树遍历一遍.假设唯一的目标行位于索引树最右的叶节点上(假设是非聚集索引,树深度2,叶节点占用k页物理存储).index seek引起的IO是4,而index scan引起的IO是K,性能差别巨大.关于索引,可以仔细读读联机文档关于物理数据库体系结构部分     查

[MySQL优化] -- 如何查找SQL效率地下的原因

[MySQL优化] -- 如何查找SQL效率地下的原因   来源: ChinaUnix博客 日期: 2009.07.20 16:12 (共有条评论) 我要评论       查询到效率低的 SQL 语句 后,可以通过 EXPLAIN 或者 DESC 命令获取 MySQL 如何执行 SELECT 语句的信息,包括在 SELECT 语句执行过程中表如何连接和连接的顺序,比如我们想计算 2006 年所有公司的销售额,需要关联 sales 表和 company 表,并且对 profit 字段做求和( su

SQL效率问题

关于in和or的效率对比:http://blog.chinaunix.net/uid-20639775-id-3416737.html SQL语句效率:http://wenku.baidu.com/link?url=NE6iSwPibvMjL1y8dOJExUO31KkdgP5LgIg2hI9dIgoeA5yLXVzTDgtotFlHDul10mbhwsTdfIEI6D7cf40Nmbfeh9K5Fb4aZMNmJBpT72S Mysql执行计划解读:http://www.cnblogs.com

sql效率

判断数据库是否有某条记录:select 1 from xxx where xxx (效率:1> colname > *) 清空表记录: truncate table xxx  > delete from xxx 多表查询: select * from xxx A left join  xxx B on A.x = B.x where xxx    > select * from xxx A where A.x in (select B.x from xxx B);

PLSQL_在执行1亿条资料插入长脚本如何判断需耗时多久v$sql / v$sqltext / v$sqlarea / v$sql_plan(案例)(监控SQL效率)

2014-08-27 BaoXinjian 一.摘要 当执行耗时时间较长的PLSQL时,有时需要查看程式运行的进度,目前已经处理了多少资料,还需处理多上资料 如果程式中专门的Log Module管控这一块,问题就不太大 如果没有这个这块的管控,可能就需要通过跟踪session,并查询动态性能视图,大概猜测出系统的运行情况,特别是undo表空间的变化 二.案例 案例: Step1. 创建测试表bxj_test create table bxj_test ( invoice_id number, i

使用OPEN SQL效率原则

①尽可能减少满足条件的数据条目数量,因为在数据查询过程中,所有满足条目的数据将通过网络从数据库服务器中被加载至应用服务器内存. ②减少传输的数据量,以减少网络流量. ③减少访问的数据库表数量,该原则的实现主要依赖于底层数据库的设计优化. ④减少查询难度,可以通过整理选择标准来实现. ⑤减少数据库负载,因为一个底层数据库可能同时支持多个应用服务器. 进行数据选择之前,需要明确下述四个问题: (1)要读取什么数据(哪些表字段)? SELECT子句用于确定读取数据库表中的哪些字段. (2)从哪个(或哪

提高SQL查询效率(SQL优化)(转载)

(转自http://blog.csdn.net/sforiz/article/details/5345359) 我们要做到不但会写SQL,还要做到写出性能优良的SQL语句. (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询, 那就需要选择交叉表

测试数据库sql声明效率

书写sql当被发现的声明.对于所期望的结果通常是更好地执行. 当面对这些实现的时候如何选择它的最好的,相对来说?这导致了这个博客的话题,如何测试sql效率 以下介绍几种sql语句測试效率的方法,大多数是从网上查找的,然后再一一測试了一下.最后我自己做了一个又一次的整理. 1. 測试sql语句运行时间的方法,获得查询前后时间差 declare @begin_date datetime declare @end_date datetime select @begin_date = getdate()

提高SQL查询效率的常用方法

(1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表. (2)WHERE子句中的连接顺序: Oracle采用自下而上的顺序解析WHERE子句