url:http://lzz7658823.iteye.com/?page=3

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: 
select id from t where num is null 
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: 
select id from t where num=0

3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如: 
select id from t where num=10 or num=20 
可以这样查询: 
select id from t where num=10 
union all 
select id from t where num=20

5.in 和 not in 也要慎用,否则会导致全表扫描,如: 
select id from t where num in(1,2,3) 
对于连续的数值,能用 between 就不要用 in 了: 
select id from t where num between 1 and 3

6.下面的查询也将导致全表扫描: 
select id from t where name like '%abc%' 
若要提高效率,可以考虑全文检索。

7.如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:
select id from t where num=@num 
可以改为强制查询使用索引: 
select id from t with(index(索引名)) where num=@num

8.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如: 
select id from t where num/2=100 
应改为: 
select id from t where num=100*2

9.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如: 
select id from t where substring(name,1,3)='abc'--name以abc开头的id 
select id from t where datediff(day,createdate,'2005-11-30')=0--‘2005-11-30’生成的id
应改为: 
select id from t where name like 'abc%' 
select id from t where createdate>='2005-11-30' and createdate<'2005-12-1'

10.不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

11.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。

12.不要写一些没有意义的查询,如需要生成一个空表结构: 
select col1,col2 into #t from t where 1=0 
这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样: 
create table #t(...)

13.很多时候用 exists 代替 in 是一个好的选择: 
select num from a where num in(select num from b) 
用下面的语句替换: 
select num from a where exists(select 1 from b where num=a.num)

14.并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。

15.索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。

14.并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。
18.尽可能的使用 varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。

20.尽量使用表变量来代替临时表。如果表变量包含大量数据,请注意索引非常有限(只有主键索引)。

21.避免频繁创建和删除临时表,以减少系统表资源的消耗。

23.在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。

25.尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。

28.在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF 。无需在执行存储过程和触发器的每个语句后向客户端发送 DONE_IN_PROC 消息。

30.尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理

sql语句优化之一:尽量使用索引避免全表扫描相关推荐

  1. oracle select max min 优化,select max(),min()为什么要全表扫描?

    本帖最后由 wendy 于 2013-7-19 15:27 编辑 版本:oracle 10.2.0.4(64bit). SQL> set autotrace on; SQL> select ...

  2. mysql常用sql语句优化

    转载自:http://www.cnblogs.com/gomysql/p/3632209.html 在数据库日常维护中,最常做的事情就是SQL语句优化,因为这个才是影响性能的最主要因素.当然还有其他方 ...

  3. 基于索引的SQL语句优化之降龙十八掌

    一篇挺不错的关于SQL语句优化的文章,因不知原始出处,故未作引用说明! 1 前言       客服业务受到SQL语句的影响非常大,在规模比较大的局点,往往因为一个小的SQL语句不够优化,导致数据库性能 ...

  4. 基于索引的SQL语句优化之降龙十八掌(转载)!

    一篇挺不错的关于SQL语句优化的文章,因不知原始出处,故未作引用说明,如有侵权,请联系本人! 1 前言       客服业务受到SQL语句的影响非常大,在规模比较大的局点,往往因为一个小的SQL语句不 ...

  5. 关于索引的sql语句优化之降龙十八掌

    1 前言       客服业务受到SQL语句的影响非常大,在规模比较大的局点,往往因为一个小的SQL语句不够优化,导致数据库性能急剧下降,小型机idle所剩无几,应用服务器断连.超时,严重影响业务的正 ...

  6. 优化数据库的方法及SQL语句优化的原则

    优化数据库的方法: 1.关键字段建立索引. 2.使用存储过程,它使SQL变得更加灵活和高效. 3.备份数据库和清除垃圾数据. 4.SQL语句语法的优化.(可以用Sybase的SQL Expert,可惜 ...

  7. mysql高效sql语句_高效SQL优化 非常好用的SQL语句优化34条

    高效SQL优化 非常好用的SQL语句优化34条 相关软件相关文章发表评论 来源:2011/2/13 9:38:43字体大小: 作者:佚名点击:576次评论:0次标签: 类型:电子教程大小:8.5M语言 ...

  8. sql语句优化总结 mysql_MySQL-SQL优化总结

    转载: https://blog.csdn.net/qq_39390545/article/details/107020686 理解SQL优化原理 ,首先要搞清楚SQL执行顺序: SELECT语句 - ...

  9. 优化数据库的思想及SQL语句优化的原则

    优化数据库的思想: ================ 1.关键字段建立索引. 2.使用存储过程,它使SQL变得更加灵活和高效. 3.备份数据库和清除垃圾数据. 4.SQL语句语法的优化.(可以用Syb ...

最新文章

  1. 第二阶段团队每日冲刺07
  2. yii连接mysql主从_Connection 数据库主从连接源码剖析
  3. 使用threejs点云秀出酷炫的图片效果(一)
  4. Pandas基础(一)——Pandas基础
  5. 区分解析解(analytical solution)与数值解(numerical solution)
  6. StanfordDB class自学笔记 (6) 关系代数
  7. 抖音矩阵号系统搭建及开发思路分享丨抖音短视频关键词优化
  8. vs2017 C#程序打包安装部署之创建Windows安装项目
  9. SharedPreferences牛刀小试
  10. java 笔画排序_中文排序 - 笔画
  11. 作业调度框架 Quartz 学习笔记(三) -- Cron表达式 (转载)
  12. Spectral Clustering
  13. js——获取data-id 的值
  14. 怎么在微信里呼起手淘
  15. stm32两轮平衡车资料
  16. Unity3D小技巧
  17. js进入页面后自动触发点击事件
  18. 拼多多店铺排名想名列前茅?6招帮你搞定!
  19. CC1310 底噪测量以及实际意义
  20. 血泪 1password

热门文章

  1. python实现knn算法鸢尾花_Python学习之knn实现鸢尾花分类
  2. ffmpeg-win32-v3.2.4 下载_iTOP-4412开发板android4.4代码下载和编译
  3. python 并列条形图_python – 来自两个pandas数据框的分组条形图
  4. python并发编程2-进程
  5. 神秘的安全测试思考案例(一)
  6. 【Maven】Java项目管理工具
  7. Spring MVC+Mybatis 多数据源配置
  8. A.PHP读取txt文本文件并分页显示的方法
  9. Win Linux 双系统安装指南
  10. 汇编语言基础知识摘要(《汇编语言》王爽)第 1 / 17 章