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语句,来提升自己的技术水平和对业务的理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值