您的位置:首页 > 数据库

SQL优化

2015-10-22 15:14 330 查看
不要

1、不要不建立聚集索引,没有聚集索引的表一直都会是全表扫描

2、不要使用select *,不要返回任何不使用的字段

避免

1、避免表达式放在where的左边,可能无法正确使用索引

2、避免where中出现!=和<>,sql会放弃索引,进行全表扫描

3、避免where对字段进行null判断,sql会放弃索引,进行全表扫描

处理:给null列使用默认值,例如0,空字符串

4、避免使用游标,可以用while循环代替

5、避免返回大量的数据,可以使用分页

6、避免使用in和not in,sql会放弃索引,进行全表扫描

处理:可以使用exists代替,连续数据也可以用between

7、避免where 中使用 or 连接条件,sql会放弃索引,进行全表扫描

处理:

select id from table where id=1 or id 2

改为

select id from table where id=1

union all

select id from table whre id =2

8、避免模糊查询like,sql会放弃索引,进行全表扫描

9、避免使用临时表

10、避免使用游标

11、避免使用count()来执行存在性检查

处理:count()会计算所有匹配的值,改用exists当发现第一个匹配项时,就会返回结果

12、避免使用两个不同类型的列进行表连接,级别低的类型会进行转换,变成级别高的类型,转换消耗资源,转换后的索引也会失效

13、避免使用sp_开头的自定义存储过程,系统存储过程是以sp_开头的,会加大存储过程的搜索量

建议

1、在where,orderby列建立索引,如果查询比较固定,可以建立复合索引

2、使用数值字段,sql处理字符串时会逐个比较每个字符,而数值型一次比较就够了

3、使用可变长度类型代替定长类型,如nvarchar代替nchar,可变长度占用空间小,自然查询也快

其他

1、一个基于数据库的应用程序运行起来很慢时,90%的问题是出在数据访问,正确的索引会使系统性能得到质的提升

2、如果是复合索引,只有当索引的第一个字段作为条件时才会使用该索引,并且应该让条件字段与索引字段顺序尽量一致

3、SQL是根据表中的数据来进行索引优化的,当在sex字段上建立索引时,sql可能根本不会去使用这个索引

4、最好不要使用触发器,触发、执行触发器本身就是一个耗费资源的过程

5、只从单个表中检索数据,没必要使用视图,有多个表时视图才有用

执行计划

SQL语句发送给SQL Server后,查询分析器会使用数据分布统计,索引结构,元数据及其他多种信息分析可能的执行计划,最后选择最佳的执行计划。

执行计划的一些说明:

表扫描,当表没有聚集索引时会发生,只要创建或者重建聚集索引可以解决。

聚集索引扫描,本质上是表扫描,一般出现扫描字样表示没有索引或索引无效,应用中应该更多出现索引查找字样。

事件探查器SQL Server Profiler

SQL事件探查器是一个跟踪和监控SQL Server实例的图形化工具,主要用于分析和衡量在数据库服务器上执行的TSQL性能,你可以捕捉服务器实例上的每个事件,将其保存到文件或表中供以后分析。

当你的数据库遇到性能问题时,大多数时候使用SQL事件探查器就能够诊断和找出引起性能问题的背后原因了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: