现在的位置: 首页 > 综合 > 正文

改善SQL语句的效率

2018年04月09日 ⁄ 综合 ⁄ 共 915字 ⁄ 字号 评论关闭

1、不要使用游标
2、规范化你的数据表
3、不要使用SELECT *
4、了解你将要对数据进行的操作
5、不要给“性别”列创建索引
6、使用事务
7、小心死锁
8、不要打开大的数据集
9、不要使用服务器端游标
10、使用参数查询
11、在程序编码时使用大数据量的数据库
12、不要使用INSERT导入大批的数据
13、注意超时问题
14、不要忽略同时修改同一记录的问题
15、在细节表中插入纪录时,不要在主表执行SELECT MAX(ID)
16、避免将列设为NULLable
17、尽量不要使用TEXT数据类型
18、尽量不要使用临时表
19、学会分析查询
20、使用参照完整性

Table Scan
1、当你看到这个信息的时候,说明在你的表上没有建立聚集索引并且没有使用到索引(如过有).在这种情况下,表中的每一条记录都将被检查一次,如果表很小,那么扫描是很快的,甚至比用了索引还要快.如果表很大,他会执行很长的时间,性能会受到很大的影响.
所以当你看到这个提示的时候,你要做的第一件事就是看表的大小,表很大就添加合适的索引.
2、你可能又会发现,已经建立了一个非聚集索引,但索引仍然没有使用。因为是否使用索引还依赖于你要获取的数据量的大小以及表的大小,或者你要查询的数据可选性很小(即在同一列中数据的重复性很高),这种情况下表扫描的速度大于使用索引.
在查询计划提示中需要留意Estimated Row Count(预计行计数) . 它的意思是查询分析器可能返回的行数。如果采用表扫描并且这个计数很高的话,查询优化器就认为使用表扫描的速度快于使用非聚集索引(如果存在的话)。

Index Seek::
在表上使用非聚集索引查找数据,一般情况下执行都很快, 尤其是返回结果集很小的时候.

Clustered Index Seek::
在表上使用聚集索引查找数据,执行很快. 他是sqlserver查询数据时所使用的查询速度最快的索引.

clustered index scan:
跟table scan 的区别是他执行的速度绝对是快于table scand的,非聚集表搜索时要访问每一条记录(里面的记录是随机摆放的),clustered index scan并不一定会访问所有的记录(它是按照你定义的索引字段物理摆放的)
 

抱歉!评论已关闭.