没有合适的资源?快使用搜索试试~ 我知道了~
自己项目中总结的一些SQL优化方法,以及需要注意的信息事项的,本来是作为自己的备忘录来使用的,分享下,大家学习学习。
资源推荐
资源详情
资源评论
一般来说,SQL 查询速度过慢,原因主要有:
1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)
2、I/O 吞吐量小,形成了瓶颈效应。4
3、没有创建计算列导致查询不优化。4
4、内存不足4
5、网络速度慢4
6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)4
7、锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)
8、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。4
9、返回了不必要的行和列4
10、查询语句不好,没有优化4
1、索引
索引的使用要合理,否则,不仅不会提高效率,反而会影响效率。优化方面,主要考
虑以下几点:
a.Join 条件,如连接字段不是外键,必须有索引,最好是唯一索引
b.排序(Order)字段、分组(group by)字段建立索引,索引的字段跟 order/group
的字段序列一致
c. 条件表达式的字段上建立索引(用的比较频繁的字段,并且字段值较多的字段,字
段值不多的不需要,如性别,只有男/女两个值,并不需要建立索引)
d.条件(排序、分组)中有多个字段可以考虑复合索引,复合索引中,常量值字段尽量
放在前面,因为:key index (a,b,c)
可以支持
a|a,b|a,b,c3
种组合进行查找,
但不支持4
b,c
进行查找4
2、Where 子句
a. 避 免 在 条 件 左 边 使 用 函 数 , 如 Select t.Id from t where
Substring(t.name,1,3)=’abc’, 可 以 考 虑 改 为 :Select t.Id from t where
t.name like ‘abc%’
b. 避免条件左边使用表达式操作,如 Select t.Id from t where t.Num/2 = 100。
这将导致全表扫描。可改为 Select t.Id from t where t.Num = 100*2
c. 避免使用 like 全匹配(like ’%*%’),如非要使用,在右边使用(like ‘*%’)
d. 避免在 where 子句上面使用 null 判断,否则将导致引擎放弃使用索引而进行全表
扫描。如:Select t.Id from t where t.name is null
e. 尽量避免使用不等操作符:!=、<>
f. 尽量避免使用 Or 连接条件
g. 慎用 in 和 not in.尽量使用 exists 或者 between and 来替代
h. 尽量用 where 子句替换 group by 的 having 子句
i. 避免在 where 子句中使用参数,如4Select t.id from t where t.Id = @Id,因为
SQL 在运行时才会解析局部变量,会导致优化程序需要在编译时选择执行计划,
但参数是需要在运行时才知道数值,无法在编译时生成执行计划。如有需要,可以
改为强制查询使用索引:Select t.id from t with(index(索引名)) where t.id =
@Id
3、临时表的使用
a. 尽量用表变量来代替临时表
资源评论
贤烨
- 粉丝: 1
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功