查询优化我已经具有4列具有数百万行的表
表PKID,OutMailID,JobMailingDate,InsertDatetime 这是数据OT如何插入到表 PKID是表中的主键 对于带有JObMailingDate的单个outMailID,在平均3个记录中存在与 不同的插入日期时间。该表具有数百万条记录
我有具有相同的数据,但那些被partaining不同类别
现在我想找出 1)找到许多其他表中的所有OutMailID谁InsertDatetime是参数数据范围 2)一旦我有OutMailID的名单我想找到最低InsertDatetime所有这些OutMailID如果这分钟日期落在参数1和参数2
之间的数据表之间是这样
Select 1 as PKID,1 as OutMailID,'2010/01/01' as JobMailingDate,'2010/01/01' as InsertDatetime
UNION ALL
Select 2 as PKID,1 as OutMailID,'2010/01/01' as JobMailingDate,'2010/01/02' as InsertDatetime
UNION ALL
Select 3 as PKID,1 as OutMailID,'2010/01/01' as JobMailingDate,'2010/01/03' as InsertDatetime
UNION ALL
Select 4 as PKID,1 as OutMailID,'2010/01/01' as JobMailingDate,'2010/01/04' as InsertDatetime
所有上述2步,我想在一个单一的查询来执行,所以我的查询是somethig这样
Select
OutMailID,Min(InsertDatetime)
from
Table T
INNER JOIN
(
Select
OutMailID
from
Table
Where
InsertDatetime Between @Param1 and @Param2
) as T1 On (T1.OutMailID = T.outMailID)
Group by
OutMailID
Having Min(InsertDatetime) Between Between @Param1 and @Param2
但这种效果不理想。任何人都可以请建议我一个这样做的好方法
第二个问题是,一旦我有第一个查询的输出,然后我使用相同的上述查询其他类别来找出最小的InsertDatatime在该类别中,一旦我拥有所有的分日期为所有类别的话,我必须找到在所有类别中最小插入日期
能否请你帮我在这
感谢 阿图尔
我会用'with'语句去执行更好的性能 –
用您正在使用的数据库标记您的问题。正如人们可能会怀疑的那样,实际的发动机作为性能考虑很重要。 –
您还应该添加所涉及的表的定义(作为'create table'语句)定义的所有索引(作为'create index')和执行计划(请以纯文本格式,屏幕截图隐藏太多细节) –