sql常用优化
最近因工作需要,查找资料整理了一下sql的常见优化,具体如下:
1.尽量避免全表扫描,一般在where或order by 涉及的列上建立索引;
2.尽量避免在where子句中对索引字段进行null值判断,否则会导致引擎弃用索引而进行全表扫描;
select id from table where num is null;
可以在num表字段设置默认值为0,且为非空字段,然后sql修改为:
select id from table where num =0;
3.尽量避免在where条件中对索引字段使用!=或<>,否则会导致全表扫描;
4.尽量避免在where条件中对索引字段使用or,否则会导致全表扫描;
如:select id from table num =10 or num = 20;
可以修改为
select id form table num =10
union all
select id form table num =20;
5.in 和not in慎用,否则会导致全表扫描;
如:select id from table where num in (1,2,3);
可修改为:select id from table where num between 1 and 3;
6.慎用like '%%',否则会导致全表扫描;
如:select id from table where name like '%abc%';
7.尽量避免在where后对索引字段字段进行表达式操作,否则会导致全表扫描;
如:select id from table where num/2 = 20;
可修改为: select * from table num = 20*2;
8.尽量避免在where后对索引字段进行函数操作,否则会导致全表扫描;
如:select id from table where substring(name,1,3) = 'abc';
可修改为:select id from table where name like 'abc%';
9.对索引字段不要在where子句中“=”左边进行函数,算术运算或其他表达式运算,否则会导致全表扫描;
如:select id from table where num+1=5;
可修改为:select id from table where num = 5-1;
10.尽量避免没必要的查询,
如:select col1,col2 into temp_table from table where 1=0;
可修改为:create table temp_table(需要的table表列);
11.尽量使用exists 代替 in;
如:select num from tableA where num in (select num from tableB);
可修改为:select num from tableA where num exists (select 1 from tableB where tableB.num =tableA.num);
12.尽可能的使用 varchar 代替 char ,因为首先变长字段存储空间小,可以节省存储空间,
其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些;
13.避免使用 select * from t,用具体的字段列表代替“*”,不要返回用不到的任何字段;
14.如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table
,然后 drop table ,这样可以避免系统表的较长时间锁定;
15.统计查询数据条数尽量避免用count(*);
如:select count(*) from table;
应修改为: select count(1) from table;
16.在可以使用UNION ALL的语句里,尽量避免使用了UNION,因为UNION 会将各查询子集的记录做比较,
故比起UNION ALL ,通常速度都会慢上许多;
17.慎用distinct关键字,因为distinct会对数据进行比较,过滤掉重复数据,需要耗费对应的时间;
18.insert into select批量插入,尽量避免一个个循环插入。
难免会有疏漏,如果发现请即使指出,谢谢!
sql常用优化的更多相关文章
- MySQL基础操作&&常用的SQL技巧&&SQL语句优化
基础操作 一:MySQL基础操作 1:MySQL表复制 复制表结构 + 复制表数据 create table t3 like t ...
- php面试专题---MySQL常用SQL语句优化
php面试专题---MySQL常用SQL语句优化 一.总结 一句话总结: 原理,万变不离其宗:其实SQL语句优化的过程中,无非就是对mysql的执行计划理解,以及B+树索引的理解,其实只要我们理解执行 ...
- MySQL常用SQL语句优化
推荐阅读这篇博文,索引说的非常详细到位:http://blog.linezing.com/?p=798#nav-3-2 在数据库日常维护中,最常做的事情就是SQL语句优化,因为这个才是影响性能的最主要 ...
- SQL Server SQL性能优化之--通过拆分SQL提高执行效率,以及性能高低背后的原因
复杂SQL拆分优化 拆分SQL是性能优化一种非常有效的方法之一, 具体就是将复杂的SQL按照一定的逻辑逐步分解成简单的SQL,借助临时表,最后执行一个等价的逻辑,已达到高效执行的目的 一直想写一遍通过 ...
- SQL性能优化常见措施(Lock wait timeout exceeded)
SQL性能优化常见措施 目 录 1.mysql中explain命令使用 2.mysql中mysqldumpslow的使用 3.mysql中修改my.ini配置文件记录日志 4.mysql中如何加索引 ...
- SQL性能优化案例分析
这段时间做一个SQL性能优化的案例分析, 整理了一下过往的案例,发现一个比较有意思的,拿出来给大家分享. 这个项目是我在项目开展2期的时候才加入的, 之前一期是个金融内部信息门户, 里面有个功能是收集 ...
- sql的优化相关问题
这篇文章写的真心不错,值得仔细拜读,所以将其转载过来了. 一. 分析阶段 一 般来说,在系统分析阶段往往有太多需要关注的地方,系统各种功能性.可用性.可靠性.安全性需求往往吸引 ...
- ORACLE性能优化之SQL语句优化
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 操作环境:AIX +11g+PLSQL 包含以下内容: 1. SQL语句执行过程 2. 优化器及执行计划 3. 合 ...
- SQL索引优化
序言数据库的优化方法有很多种,在应用层来说,主要是基于索引的优化.本次秘笈根据实际的工作经验,在研发原来已有的方法的基础上,进行了一些扩充,总结了基于索引的SQL语句优化的降龙十八掌,希望有一天你能用 ...
随机推荐
- maven报错【Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.6 or one of】
[自己的操作] (1)windows -> Preferences -> maven 的settings.xml文件中.m2的位置已经失效,更改正确后尝试 (2)pom.xml还有下面错误 ...
- 对Json的各种遍历方法
慎用for in函数(有可能由于原型链的问题导致遍历问题): 如果要是用for in 一定要使用if (obj1.hasOwnProperty(key)) {}先做判断 解决方法 :1.eval() ...
- Codeforces 914H Ember and Storm's Tree Game 【DP】*
Codeforces 914H Ember and Storm's Tree Game 题目链接 ORZ佬 果然出了一套自闭题 这题让你算出第一个人有必胜策略的方案数 然后我们就发现必胜的条件就是树上 ...
- Atocder ARC082 F-Sandglass 【思维题】*
Atocder ARC082 F-Sandglass Problem Statement We have a sandglass consisting of two bulbs, bulb A and ...
- 在 Windows 安装期间将 MBR 磁盘转换为 GPT 磁盘
以 UEFI 启动的 Windows 磁盘必须是 GPT 格式.本文将介绍如何在安装 Windows 期间将磁盘从 MBR 转换成 GPT. 特别注意:操作不慎可能丢失所有数据,如果你懂得安装系统的一 ...
- 在iOS上实现二维码功能
http://blog.csdn.net/abcmx/article/details/8011904 如今二维码随处可见,无论是实物商品还是各种礼券都少不了二维码的身影.而手机等移动设备又成为二维码的 ...
- iOS保存数据的4种方式
在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题.将数据保存到本地,能够让程序的运行更加流畅,不会出现让人厌恶的菊花形状,使得用户体验更好.下面介绍一下数据保存的方式: 1.NSKeyed ...
- eclipse显示/隐藏代码行号
Window→Preferences→General→Editors→TextEditors→勾选Show line numbers
- hadoop入门手册5:Hadoop【2.7.1】初级入门之命令:文件系统shell2
问题导读 1.改变hdfs文件的权限,需要修改哪个配置文件?2.获取一个文件的或则目录的权限,哪个命令可以实现?3.哪个命令可以实现设置访问控制列表(ACL)的文件和目录? 接上篇:Hadoop[2. ...
- 呵呵sql
INSERT INTO fnd_document_folder_structure_t (folder_name,parent_folder_id,company_type_id,inv_flag, ...