vi
尽量使用exists代替select count(
)来判断是否存在记录
count函数只有在统计表中所有行数时使用
而且count(
)比count(*)更有效率
vii尽量使用>=不要使用>
viii注意一些or子句和union子句之间的替换
ix注意表之间连接的数据类型避免不同类型数据之间的连接
x注意存储过程中参数和数据类型的关系
xi注意insertupdate操作的数据量防止与其他应用沖突如果数据量超过个数据页面(k)那么系统将会进行锁升级页级锁会升级成表级锁
b)索引的使用规范
i索引的创建要与应用结合考虑建议大的OLTP表不要超过个索引
ii尽可能的使用索引字段作为查询条件尤其是聚簇索引必要时可以通过index index_name来强制指定索引
iii避免对大表查询时进行table scan必要时考虑新建索引
iv在使用索引字段作为条件时如果该索引是联合索引那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引否则该索引将不会被使用
v要注意索引的维护周期性重建索引重新编译存储过程
c)tempdb的使用规范
i尽量避免使用distinctorder bygroup byhavingjoincumpute因为这些语句会加重tempdb的负担
ii避免频繁创建和删除临时表减少系统表资源的消耗
iii在新建临时表时如果一次性插入数据量很大那么可以使用select into代替create table避免log提高速度如果数据量不大为了缓和系统表的资源建议先create table然后insert
iv如果临时表的数据量较大需要建立索引那么应该将创建临时表和建立索引的过程放在单独一个子存储过程中这样才能保证系统能够很好的使用到该临时表的索引
v如果使用到了临时表在存储过程的最后务必将所有的临时表显式删除先truncate table然后drop table这样可以避免系统表的较长时间锁定
vi慎用大的临时表与其他大表的连接查询和修改减低系统表负担因为这种操作会在一条语句中多次使用tempdb的系统表
d)合理的算法使用
根据上面已提到的SQL优化技术和ASE Tuning手册中的SQL优化内容结合实际应用采用多种算法进行比较以获得消耗资源最少效率最高的方法具体可用ASE调优命令set statistics io on set statistics time on set showplan on 等
[] []