我的桌子有200万条记录。我想在临时表中插入数据并在我的过程中使用该临时表。但是插入需要30秒。请提出如何减少时间的建议? 我无法显示实际查询。所以我的查询就是这种格式。
注意:我已经使用过CTE。
;With Tmp_TableName
as
(
SELECT T1.A, T1.B, T1.C, T1.D, T1.E, T1.F, T1.G , T1.H
FROM TableName T1 WITH(NOLOCK)
WHERE T1.A = 1
AND CONVERT( NVarchar, T1.H, 111) <= CONVERT( NVarchar, getdate(), 111)
)
SELECT *
FROM Tmp_TableName T1 WITH(NOLOCK);
答案 0 :(得分:1)
我建议修正您的WHERE
子句:
WHERE T1.A = 1 AND
T1.H < DATEADD(DAY, 1, CAST(GETDATE() as DATE)0
这可以利用TABLE1(A, H)
上的索引。
答案 1 :(得分:1)
您可以使用cast()
进行过滤:
WHERE T1.A = 1 AND
T1.H <= CAST(GETDATE() AS DATE) -- This assumes `T1.H` has no time. (i.e. 00:00:00);
如果您的SELECT
语句中有任何具有varchar/nvarchar(max)
类型的字段,那么它可能会变慢,您可以排除它并进一步检查。
但是,您没有在索引中包含任何表结构,因此很难回答任何人。