前事不忘,后事之师,不忘国耻!

 注册  找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2197|回复: 0

对mssql性能优化的一些认识

[复制链接]

对mssql性能优化的一些认识

[复制链接]
ehxz

主题

0

回帖

7161

积分

管理员

积分
7161
2007-6-13 12:57:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
1.尽量少使用游标
  原因很简单;就是游标的算法是最原始的计算机算法(和for.if等语句一样,一条条搜索来算;效率极低);
而sql语句用的是集合运算;速度则快的多;如果用索引速度则很快(用了指针).

2.创建索引.
a.聚集索引:
聚集索引是磁盘存储和逻辑显示是一样的
mssql表的主键一般是聚集索引;主键(每一条记录唯一确定);
创建的主键自动会是聚集索引;
如有一个非常大的表(有百万行);很长时间磁盘存储上会有类似碎片(磁盘填充率效率低;一般是频繁删除造成的);
  要提高它的性能的最简洁办法是:把这个表的主键去掉再保存后;然后重新设主键再保存;
  (这个表就会在磁盘上重新整理排序;性能当然会提高哟)
b.非聚集索引:
非聚集索引是在外面建立小的附加表(一种树形结构;大多数是B或B+树);
读(遍历select等sql语句)表特快;但写(update;delete.insert等sql语句)表性能会略微下降.
针对数据量大的表建议非聚集索引不要超过3个(节省额外磁盘负担).
不要给类似“性别”列创建索引.

3.死锁:
是指有线程在读一条记录;别的线程读这条记录就要等待;
在mssql中只要长期占那条记录的线程去掉;死锁就会解除.
在mssql中锁是针对每一行记录(所以性能不错).
经常产生锁的原因有:
a.在sql语句中使用事务语句(特别是事务中当查询比较耗时).
b.在前台的应用程序的connetion冲突(未关闭).
c.多表联合查询(尤其是在打开大的数据集时).

4.sql语句优化
a."is null" "not" "or" "in"不会用索引
b.避免在索引列上使用计算或函数处理(索引会大失性能).还有"%";有的甚至会全失索引性能
c.SELECT中避免使用 ‘ * ‘(宁可把需要字段列出来;而不要用*去把所有的字段都列出来).
d.避免相关子查询(select中套select).
e.where的条件中"=>exists>in"(指性能)
f."order by" "group by" "having" "distinct"等语句要慎用(因为它们效率不高;它们是先把数据到临时表中再进行处理的).
g.聚集索引如有2个字段组成(tt1和tt2);tt1在前面;where的条件中如只用tt1字段来判断;就会用到一半的聚集索引;
where的条件中如tt1和tt2字段都用来判断了;就会全用到聚集索引;
where的条件中如只用tt2字段来判断;就会用不到聚集索引了;

5.尽量不要使用TEXT数据类型
除非你使用TEXT处理一个很大的数据,否则不要使用它。因为它不易于查询,速度慢,用的不好还会浪费大量的空间。
一般的,VARCHAR可以更好的处理你的数据。

6.尽量不要使用临时表
尽量不要使用临时表,除非你必须这样做。一般使用子查询可以代替临时表。使用临时表会带来系统开销,
如果前台的代码你是使用数据库连接池而临时表却自始至终都存在。SQL Server提供了一些替代方案,比如Table数据类型。

7.尽量少使用外键和触发器。
因为在mssql中这些功能的性能做得不是很好;随便动一下表(它就会到相关的表去搞判断;有很多情况并不需要);在后台消耗资源大.
宁可在前台多写些相关表的操作的代码.

免责申明1、欢迎访问本站,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2、本文内容仅代表作者观点,不代表本站立场,作者自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3、本文内容,包括但不限于源码、文字、图片等,仅供参考。本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容。
4、如本帖侵犯到任何版权问题,请立即告知本站 ,本站将及时删除并致以最深的歉意!客服邮箱:admin@dbabbs.com
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|DBA论坛中国 ( 鲁ICP备20017503号-2 )

GMT+8, 2024-5-13 23:01 , Processed in 0.055599 second(s), 11 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表