Sql 如何改进SELECT查询
有没有办法改进我的查询Sql 如何改进SELECT查询,sql,tsql,sql-server-2012,Sql,Tsql,Sql Server 2012,有没有办法改进我的查询 SELECT * FROM StringControllerDaten WHERE StringControllerDaten.Erstellt NOT IN ( SELECT Min(Erstellt) AS Erstellt FROM StringControllerDaten GROUP BY StringControllerDaten.StringController, D
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)
)
此查询返回与15分钟间隔中的一个最小日期时间不匹配的所有数据
它再次运行+1Mio行,需要几个小时
编辑: 估计的查询计划
这篇文章中最重要的答案能帮到你吗 编辑:仍然需要弄清楚如何将
NOT IN
放入内部联接
achinda99写道:“在大多数数据库系统中,连接的运行速度比在WHERE…In中的运行速度快。”
没有办法测试atm,tho
CREATE TABLE [dbo].[AllDates]
( COLUMN Item DATETIME)
SELECT
StringControllerDaten.ID -- or what you need
FROM
StringControllerDaten
WHERE
StringControllerDaten.Erstellt NOT IN (SELECT AllDates.Item FROM AllDates)
检查并发布查询计划。
select*
将有所帮助。与*
相比,显式放置列名更好。查询计划将解释很多内容,更重要的是,它将显示查询中最耗时的任务。请先使用表变量存储Min(Erstellt)
,然后在表中使用该表。是否正确索引表?您可以附加.sqlplan
文件吗?添加一些示例数据会有所帮助。@EvaldasBuinauskas在哪里可以找到此文件?