当前位置:   article > 正文

T-SQL语句优化_t-sql优化建议

t-sql优化建议

1)明确清楚一个业务需要什么样的数据,若只需要一个表的tname字段,那么我就只SELECT tname from TestTable,而不是select * from TestTable。
2)当我需要按tname字段筛选时,WHERE 条件中,不要带OR,IN,NOT IN ,EXISTS ,NOT EXISTS。
3)WHERE 条件中不要带计算表达式,例如:WHERE Convert(date, birthDay)=Convert(date,GETDATE()),这样会导致每查询一行就要进行一次匹配。可以使用一个变量先计算赋值,然后再等于变量。
4)WHERE 条件中,使用LIKE 字段,避免LIKE ‘%常量%’,这种查询会导致全表扫描,可以使用 like ‘常量%’,这种查询会走索引。
5) 避免多个大数据表连接查询。
6)当使用存储过程时,传入条件可以动态拼接,不是 @Code=‘’ or Code like ‘%’+@Code+‘%’ or Code IN (SELECT * FROM dbo.fun_split(@Code, ‘,’)),fun_split函数是用来按分隔符切割字符串到一个表变量。
7)当查询仅仅是确定数据库中是否存在该记录时,例如:
CREATE PROCEDURE [dbo].[UP_ProductTargetSalesSite_Exists]
@AccountInfoID int
AS
DECLARE @TempID int
SELECT @TempID = count(1) FROM [AccountInfo] WHERE AccountInfoID = @AccountInfoID
IF @TempID = 0
RETURN 0
ELSE
RETURN 1
本身只需要查询一条记录的聚集索引字段即可SELECT TOP 1 AccountInfoID FROM [AccountInfo] WHERE AccountInfoID = @AccountInfoID,但该查询却进行了全表扫描(Count(1))。
8)使用表变量作为连接对象时,表变量的数据不要超过500行,否则使用临时表。
9)多表连接查询时,可以先通过子查询缩小查询范围,然后再进行连接。、
SELECT * FROM A JOIN B ON A.ID=B.ID WHERE A.TestTime BETWEEN ‘2014-04-01’ AND ‘2014-04-30’ ,
SELECT * FROM (SELECT * FROM A WHERE TestTime BETWEEN ‘2014-04-01’ AND ‘2014-04-30’ ) AS C JOIN B
ON C.ID=B.ID
10)查询的业务比较复杂,那么可以先画个示意图,把整个业务拆分成一小块一小块的,然后再串联起来,这样不仅对业务更加了解,而且可以准确快速的实现目标。
11)程序在开发的时候,通常为了赶进度而忽略了大数据下查询的性能问题,我们可以先实现功能,然后再重构T-SQL语句,来提升自己的技术水平和对业务的理解。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/142133
推荐阅读
相关标签
  

闽ICP备14008679号