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 子句以避免转换,则AH 上的索引以及包含其他列的索引应该会提高性能。 【参考方案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 查询需要时间执行的主要内容,如果未能解决你的问题,请参考以下文章

pl sql查询需要更多时间来执行

except() 查询的 spark sql 执行需要很多时间

sql 查询执行的详细时间profile

SQL 查询需要一个多小时才能执行 200k 行

如果不需要,SQL Server 是不是足够聪明,不会执行昂贵的查询? (短路)

同一查询的不同执行时间 - SQL Server