新文章 网摘 文章 随笔 日记

改善SQL查询性能的25个技巧

1.使用EXISTS代替IN检查数据是否存在。
2.避免在SELECT语句中使用*。输入所需的列名称。
3.选择适当的数据类型。例如,要存储字符串,请使用varchar代替文本数据类型。每当您需要存储大数据(超过8000个字符)时,请使用文本数据类型。
4.如果可能,请避免使用nchar和nvarchar,因为这两种数据类型仅占用char和varchar的双倍内存。
5.避免在固定长度字段中使用NULL。在需要NULL的情况下,请使用可变长度(varchar)字段,该字段为NULL占用较少的空间。
6.避免有子句。如果您进一步希望过滤聚合结果,则必须具有Haven子句。
7.创建聚簇索引和非聚簇索引。
8.将聚簇索引保持较小,因为聚簇索引中使用的字段也可能在非聚簇索引中使用。
9.大多数选择性列应放在非聚集索引的键的最左侧。
10.删除未使用的索引。
11.最好在具有整数值而不是字符的列上创建索引。整数值比字符值使用更少的开销。
12.使用联接而不是子查询。
13.使用WHERE表达式限制使用联接创建的结果表的大小。
14.插入表时使用TABLOCKX,合并时使用TABLOCK。
15.从任何表查询数据时,请使用WITH(NOLOCK)。
16.使用SET NOCOUNT ON并使用TRY-CAPTCH以避免死锁。
17.避免使用游标,因为游标的性能非常低。
18.使用Table变量代替Temp表。使用Temp表需要与TempDb数据库进行交互,这是一项耗时的任务。
19.尽可能使用UNION ALL代替UNION。
20.在SQL对象名称之前使用模式名称。
21.对经常使用的数据和更复杂的查询使用存储过程。
22.由于事务锁定了处理表数据,因此请尽可能减少事务,并可能导致死锁。
23.避免使用带有用户定义的存储过程名称的前缀“ sp_”,因为SQL Server首先在master数据库中搜索用户定义的过程,然后在当前会话数据库中搜索用户定义的过程。
24.避免使用不相关的标量子查询。将此查询用作单独的查询而不是主查询的一部分,并将输出存储在变量中,可以在主查询或批处理的后续部分中引用该变量。
25.避免使用多语句表值函数(TVF)。多语句TVF比内联TVF的成本更高。

 

https://www.winwire.com/25-tips-to-improve-sql-query-performance/

posted @ 2021-05-22 08:47  岭南春  阅读(121)  评论(0)    收藏  举报