如何改进SELECT查询

时间:2016-03-09 08:08:45

标签: sql tsql sql-server-2012

有没有办法改善我的查询

SELECT *
FROM  StringControllerDaten
WHERE StringControllerDaten.Erstellt NOT IN
(
    SELECT  
            Min(Erstellt) AS Erstellt   
    FROM        StringControllerDaten

    GROUP BY
    StringControllerDaten.StringController,
    DATEPART(YEAR, Erstellt),
    DATEPART(MONTH, Erstellt),
    DATEPART(DAY, Erstellt),
    DATEPART(HOUR, Erstellt),
    (DATEPART(MINUTE, Erstellt) / 15)
)

此查询返回所有与15Min Interval中的最小日期时间之一不匹配的数据。

它再次运行+ 1Mio Row并且需要数小时。

编辑:

估算的查询计划

estimated query plan

2 个答案:

答案 0 :(得分:2)

  1. 创建一个日期列表,最小和最大间隔为15分钟Erstellt然后放入表格/光标/ temptable。
  2.   

    请参阅Generate a resultset of incrementing dates in TSQL

    让我们说这个表看起来像:

        CREATE TABLE [dbo].[AllDates]
        ( COLUMN Item DATETIME)
    
    1. 将您的表格与1中的列表进行交叉比较。

      SELECT
         StringControllerDaten.ID -- or what you need
      FROM
         StringControllerDaten
      WHERE
         StringControllerDaten.Erstellt NOT IN (SELECT AllDates.Item FROM AllDates)
      

答案 1 :(得分:0)

这个帖子中的最高答案可以帮助你吗?

编辑:仍然需要弄清楚如何将npm install纳入内部联接

Complex join with nested group-by/having clause?

achinda99写道:"在大多数数据库系统中,JOIN的工作速度比执行WHERE ... IN更快。"

没有办法测试atm,tho。