代码优化建议:
1、日期判断:
WHERE dt>= '20060211' AND dt<'20060212'
--性能优于
WHERE CONVERT(VARCHAR(8),dt,112) ='20060211'
2、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)
3、去除查询中不必要的行和列
4、纵向、横向分割表,减少表的尺寸(sp_spaceuse)
5、在使用UNION 语句时,当明确数据不会重复时,使用 UNION ALL 代替 UNION。
数据库优化建议:
1、数据文件不要存放在包含操作系统文件的磁盘驱动器中;
2、将事务日志文件与数据文件分别存放不同驱动器上,增加读取速度;
3、建议将 Tempdb 数据库放在一个独立驱动器上(Raid 1+0 或 Raid 5),并将数据文件拆分成与CPU个数相同以提高并发;
4、
索引优化建议:
1、经常搜索的列、主键列、外键列、经常进行范围搜索、排序和列上创建索引,WHERE 子句中使用的列创建索引
2、很少查询使用的列、列的值变化不大的列、定义为text、image、bit等类型的列、经常性修改的列不做索引
3、不要对有限的几个值的字段建单一索引如性别字段。
1、分析产品业务数据的增长量
2、了解产品业务操作类型,以更新为主还是查询为主,业务高峰期,确定磁盘方案、数据文件、日志文件、系统库文件配置
64位CPU、RAID5
3、适当增加约束,默认值约束,Check约束,唯一约束
4、用于关联但是修改少的字段可冗余
5、UPDATE 语句更新条件要详细,减少更新锁(U锁)或排它锁(X锁)锁定的数据
SQL Server 选择RAID-10(数据镜像分块)性能与RAID-01(数据分块镜像)性能相当,但容错性更好,RAID5需要使用奇偶校验。
服务器级别优化
1、检测 I/O吞吐量小,判断是否是I/O形成了瓶颈效应。
2、内存检测
3、网络带宽检测
问题检测:
SQL Server CPU长期处于繁忙并且IO 偏高,应检测内存是否到达瓶颈。
SQL Server在一般情况下占用CPU在30%左右表示服务器比较空闲,到达50%~60%表示服务器比较繁忙,到达80%表示服务器非常繁忙。
在数据库约束中唯一约束有助于筛选查询,应该至少留一个唯一索引。
对于SQL Server排序操作,创建非聚集索引(ProductId,Qty)比Qty单纯排序大大提高性能。这是由于Scan操作变成了Seek Index操作。
一个应用程序写完后,应该坚持器IO、CPU、内存的使用情况。
32位SQL Server内存瓶颈要注意检查AWE等配置项信息。