SQL命令优化
与数据库交互的基本语言是sql,数据库每次解析和执行sql语句多需要执行很多步骤。以sql server为例,当数据库收到一条查询语句时,语法分析器会扫描sql语句并将其分成逻辑单元(如关键词、表达式、运算符和标识符)并生成查询树,最后查询优化器将分析所有可以访问数据库的源表的方法,从中选择一组返回结果集最快且消耗资源较少的步骤。查询树随即进行更新以准确记录这个步骤,接着交由数据库引擎开始执行,然后将查询结果返回给用户。可见数据库引擎每次执行sql命令都会有很大的开销,如果提交的sql质量不高甚至有逻辑错误就会造成无谓的开销和时间浪费。为了避免这种情况,在使用sql命令时应注意以下原则:
1、字段提取要按照“需多少、提多少”的原则,避免“select *”,尽量使用“select 字段1,字段2,字段3 ...”。实践证明,每少提取一个字段,数据库提取速度就会有相应的提升。提升的速度还要由你舍弃的字段大小来决定。
2、尽量使用exists代替select count(*) 来判断是否存在记录。优化器优化exists谓词时支持短路功能。只要找到一行,不需要再扫描其他行就可以确定该表是否包涵行了。count函数只有在统计表中所有行的行数时使用。
3、尽量使用(not) exists代替(not) in 操作,in的sql性能总是比较低的。
--语句
select dname,deptno from dept where deptno not in(select deptno from emp where dept.deptno=emo.deptno)
--语句
select dname,deptno from dept where not exists(select deptno from emp where dept.deptno=emo.deptno)
4、尽量使用not in,可以用left outer join代替它。
5、尽量不要使用or,使用or会引起全表扫描,将大大降低查询效率
6、注意where子句的写法,必须考虑语句顺序,应该根据索引顺序、范围大小来确定条件子句的前后顺序,尽可能地让字段顺序与索引顺序一致,范围从大到小。
7、尽量使用“>=“,不用使用”>“
8、在编写sql语句之前了解表的索引结构。有效地利用索引能够避免不必要的全表扫描,缩短查询时间。应该避免在where子句中使用is null、<>、!=、not、 not exist、not in、not like等命令,他们通常会引起全表扫描导致索引无效。
9、在where 子句中,任何对列的操作(函数、计算等)讲导致索引失效,这些操作应该尽可能地移至等号右边,如where substring(id,1,1)=‘a‘,应该写成where id like ’a%‘;where result*10> 30应该写成where result >30;
对sql命令进行优化的基本原则是尽量减少类型转换和计算,充分利用表索引,减少全表扫描的次数。
SQL命令优化的更多相关文章
- SQL命令优化(积累)
与数据库交互的基本语言是sql,数据库每次解析和执行sql语句多需要执行很多步骤.以sql server为例,当数据库收到一条查询语句时,语法分析器会扫描sql语句并将其分成逻辑单元(如关键词.表达式 ...
- SQL性能优化常见措施(Lock wait timeout exceeded)
SQL性能优化常见措施 目 录 1.mysql中explain命令使用 2.mysql中mysqldumpslow的使用 3.mysql中修改my.ini配置文件记录日志 4.mysql中如何加索引 ...
- REORG TABLE命令优化数据库性能
[转]DB2日常维护——REORG TABLE命令优化数据库性能 一个完整的日常维护规范可以帮助 DBA 理顺每天需要的操作,以便更好的监控和维护数据库,保证数据库的正常.安全.高效运行,防止 ...
- DB2日常维护——REORG TABLE命令优化数据库性能
一个完整的日常维护规范可以帮助 DBA 理顺每天需要的操作,以便更好的监控和维护数据库,保证数据库的正常.安全.高效运行,防止一些错误重复发生. 由于DB2使用CBO作为数据库的优化器,数据库对象的状 ...
- 利用 Oracle EM 企业管理器 进行oracle SQL的优化(自动生成索引)
利用 Oracle EM 企业管理器 进行oracle SQL的优化(自动生成索引) ##应用情景 项目中有大量的SQL,尤其是涉及到统计报表时,表关联比较多,当初开发建表时也没搞好索引关联的,上线后 ...
- SQL索引优化
序言数据库的优化方法有很多种,在应用层来说,主要是基于索引的优化.本次秘笈根据实际的工作经验,在研发原来已有的方法的基础上,进行了一些扩充,总结了基于索引的SQL语句优化的降龙十八掌,希望有一天你能用 ...
- sql数据库优化技巧汇总
(转)SQL 优化原则 一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着 ...
- 转发:使用sql命令查询视图中所有引用的基础表
转自:使用sql命令查询视图中所有引用的基础表 使用sql命令查询视图中所有引用的基础表 之前有写过如何利用sql查询视图中所有引用的表发现这个方法并不能查出视图中所有的基础表,如果视图中有嵌套视图就 ...
- [SQL Server优化]善用系统监视器,确定系统瓶颈
原文:[SQL Server优化]善用系统监视器,确定系统瓶颈 来自: http://hi.baidu.com/solorez/blog/item/f82038fa0e71b78d9e51468c.h ...
随机推荐
- CCNA 课程 六
路由协议概述: 通过一种路由协议学习到了多个去往同一目标网络的路由,metric小的放入路由表中.metric一样,同时放进路由表. 通过多种路由协议学习到了去往同一目标网络的路由,路由协议管理距离小 ...
- springboot+mybatis+springSecurity+thymeleaf
配置步骤: .pom <dependencies> <dependency> <groupId>org.springframework.security</g ...
- UVA 11525 Permutation (树状数组+YY)
题意:给你k个数Si,然后给你一个等式 H= ∑ Si ∗ (K − i)! (i=(1->k)且0 ≤ Si ≤ K − i). 叫你求出第H个全排列 其实这是一个康托展开:X=a[n ...
- javascript 时间日期处理相加相减
var d = new Date("2008/04/15"); d.setMonth(d.getMonth() + 1 + 1);//加一个月,同理,可以加一天:getDate() ...
- ubuntu12.04 错误:phonon: No such file or directory; phonon模块的安装
http://blog.csdn.net/xsl1990/article/details/9009919 错误:phonon: No such file or directory 1)sudo ap ...
- 解决Chrome Safari Opera环境下 动态创建iframe onload事件同步执行
我们先看下面的代码: setTimeout(function(){ alert(count); },2000); var count = []; document.body.appendChild(c ...
- 一位资深php程序员在北京的面试30个题目
1.SESSION 保存在服务器的哪里?2.服务端是如何获取客户端的cookie?3.如何实现SESSION共享,共享的原理是什么?4.请大致说出LVS搭建的过程,文件共享原理是什么?5.网络共享服务 ...
- PostMan使用教程(1)
Postman介绍 Postman是google开发的一款功能强大的网页调试与发送网页HTTP请求,并能运行测试用例的的Chrome插件.其主要功能包括: 模拟各种HTTP requests 从常用的 ...
- 算法练习1---桶排序java版
今天复习了桶排序. 例如现在有满分为10分的试卷,学生得分分别为2,8,5,3,5,7,现在要给这些分数按照从大到小输出,使用桶排序的思想:有11个桶,每个桶有一个编号,编号从0-10,每出现一个分数 ...
- linux下安装Java se和Eclipse
首先要去下载好JDK,Java SE 8的官方网址是http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-213 ...