dbeaver编写执行存储过程 SQL Server存储过程编写和优化措施[2]
SQL Server存储过程编写和优化措施[2]
vi 尽量使用exists代替select count( )来判断是否存在记录 count函数只有在统计表中所有行数时使用 而且count( )比count(*)更有效率vii 尽量使用 >= 不要使用 >
![dbeaver编写执行存储过程 SQL Server存储过程编写和优化措施[2]](http://img.zhputi.com/uploads/9ed8/9ed8611ba0b2a189b883ebb2c2a4c32d24919.jpg)
viii 注意一些or子句和union子句之间的替换
ix 注意表之间连接的数据类型 避免不同类型数据之间的连接
x 注意存储过程中参数和数据类型的关系
xi 注意insert update操作的数据量 防止与其他应用冲突 如果数据量超过 个数据页面( k) 那么系统将会进行锁升级 页级锁会升级成表级锁
b)索引的使用规范
i 索引的创建要与应用结合考虑 建议大的OLTP表不要超过 个索引
ii 尽可能的使用索引字段作为查询条件 尤其是聚簇索引 必要时可以通过index index_name来强制指定索引
iii 避免对大表查询时进行table scan 必要时考虑新建索引
iv 在使用索引字段作为条件时 如果该索引是联合索引 那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引 否则该索引将不会被使用
v 要注意索引的维护 周期性重建索引 重新编译存储过程
c)tempdb的使用规范
i 尽量避免使用distinct order by group by having join cumpute 因为这些语句会加重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 等
lishixinzhi/Article/program/SQLServer/201311/22373