天津定制网站建设商店设计,高碑店地区网站建设,服务器网站管理系统,外贸网络推广平台1. 在长时间运行的查询和短查询中使用事务 如果预期有一个长时间运行的查询#xff0c;并且有大量的数据输出时#xff0c;开发者就应该在BEGIN TRAN 和END TRAN之间使用事务。 这样事务会在缓冲区缓存为独立事务#xff0c;并会被分配特定内存#xff0c;以此来提高处理… 1. 在长时间运行的查询和短查询中使用事务 如果预期有一个长时间运行的查询并且有大量的数据输出时开发者就应该在BEGIN TRAN 和END TRAN之间使用事务。 这样事务会在缓冲区缓存为独立事务并会被分配特定内存以此来提高处理速度。 2. 不要使用SELECT * 如果使用SELECT * 来选择表中的所有记录那么一些不必要的记录也被读取、缓存增加了磁盘的I/O和内存消耗。 3. 避免在WHERE子句中使用显式或隐式函数比如Convert () 4. 避免在触发器中执行长时间的操作 5. 适当使用临时表和表变量 当结果集较小的时候请尽量使用表变量当结果集相当大时使用临时表。 6. 使用连接JOIN代替子查询Sub-Queries 子查询通常作为内联代码来使用而连接JOIN则作为表来使用这样速度会更快。所以应尽量避免在连接中使用子查询。 7. 连接条件中表的顺序 在连接条件中应尽量首先使用较小的表然后逐步使用较大的表。 8. 循环优化 如果操作在循环内部没有任何影响那么应尽量将操作放到循环外面这样可以减少不必要的重复工作。因为SQL Server优化器不会自动识别这种低效率的代码更不会自动优化其他一些语言的编译器可以。 9. 参数探测 不要在正执行的SP存储过程中使用SP参数这样会导致参数探测Parameter Sniffing。应该在声明和设置后再使用SP参数。由于这个原因SP的行为在每次运行期间都不相同。 10. 当使用条件语句时可以使用Index索引Hint提示 比如在SQL Server 2008中可以使用Index hint也可以使用fixed plan hint强制在查询中使用hint以提高运行速度。 11. 在声明中明确指定存储过程中数据类型的大小 开发者随机声明数据类型的大小是不可取的如Varchar (500)。这在执行时会在缓冲区中增加不必要的预留空间。 12. 在查询中有效利用MAXDOP最大并行度设置 询问数据库管理员关于四核CPU可用性的设置包括内存的设置然后适当使用hint可以有效改善查询速度。 13. SQL Server 2008中的GROUPING SETS 如果数据库服务器为SQL Server 2008那么可以在所有的Unions中使用Grouping Set来代替Group By。这样在Union中重新进行group by排序时优化器不会每次都制定一个计划。 14. 当发生死锁时总是使用With (nolock) 和With (rowlock) 15. 使用Update From而不是简单的Update Sql代码 UPDATE titleauthorSET royaltyper 90WHERE au_id (SELECT au_id FROM authorsWHERE au_lname ‘Ringer’ AND au_fname ‘Albert’)AND title_id (SELECT title_id FROM titlesWHERE title ‘Life without Fear’)Update fromUPDATE titleauthorSET royaltyper 90FROM authors a, titles tWHERE titleauthor.au_id a.au_idAND a.au_lname ‘Ringer’AND a.au_fname ‘Albert’AND titleauthor.title_id t.title_idAND t.title ‘Life Without Fear’
UPDATE titleauthor
SET royaltyper 90
WHERE au_id (SELECT au_id FROM authors
WHERE au_lname ‘Ringer’ AND au_fname ‘Albert’)
AND title_id (SELECT title_id FROM titles
WHERE title ‘Life without Fear’)
Update from
UPDATE titleauthor
SET royaltyper 90
FROM authors a, titles t
WHERE titleauthor.au_id a.au_id
AND a.au_lname ‘Ringer’
AND a.au_fname ‘Albert’
AND titleauthor.title_id t.title_id
AND t.title ‘Life Without Fear’ 16. 使用UNION ALL代替UNION UNION和UNION ALL的差别就在于UNION会对数据做一个distanct的动作而这个distanct动作的速度则取决于现有数据的数量数量越大时间越长。因此尽量使用UNION ALL来代替UNION。 17. 避免高成本操作如NOT LIKE 转载于:https://blog.51cto.com/yaomingkai/1131609