SQL 查询需要时间执行
Posted
技术标签:
【中文标题】SQL 查询需要时间执行【英文标题】:SQL Query takes time for execution 【发布时间】:2019-02-22 13:25:49 【问题描述】:我的表有 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);
【问题讨论】:
是选择部分慢还是插入?你为什么要这样比较日期? 选择需要很长时间的部分 这是一个完整的查询,还是您在插入/做任何事情之前做了一些其他操作。 @BhavikaZimbar,您可以上传您的实际执行计划here 并将链接添加到您的问题。一旦您按照建议重构了WHERE
子句以避免转换,则A
、H
上的索引以及包含其他列的索引应该会提高性能。
【参考方案1】:
我建议修复您的 WHERE
子句:
WHERE T1.A = 1 AND
T1.H < DATEADD(DAY, 1, CAST(GETDATE() as DATE)0
这可以利用TABLE1(A, H)
上的索引。
【讨论】:
谢谢。但这仍然需要很多时间【参考方案2】:你可以用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)
类型的字段,那么它可能会运行缓慢,您可以将其排除并进一步检查。
但是,您没有包含任何带有索引的表结构,因此很难回答任何人。
【讨论】:
以上是关于SQL 查询需要时间执行的主要内容,如果未能解决你的问题,请参考以下文章
except() 查询的 spark sql 执行需要很多时间