我有一张包含数百万条数据条目的表格。 我试图快速找到单个项目的每组最小和最大值。
结构就像这样
" GROUPC" /" LogDT"并且不到10组。
当我申请单个GROUPC /项目最低要求时,我会在100毫秒内获得快速回复
示例:第59项
select GROUPC, min(LogDT) from TABLE as T where T.Item=59 and t.GROUPC='GR1'
我需要所有团体的最低要求。
select GROUPC, min(LogDT) from TABLE as T where T.Item=59 group by t.GROUPC
这有效,但需要12秒,尽管目前只有3组。
获取组列表只需15ms
select distinct GROUPC from TABLE
我有什么想法可以将这两个请求快速地结合起来?
答案 0 :(得分:1)
您有GROUP
和LogDT
列的索引,这很好,所以我相信这个查询会非常快:
SELECT GROUP, MIN(LOGDT) FROM TABLE AS t GROUP BY t.GROUP
但由于您按Item = 59进行过滤,并且您在“项目”列上没有索引,因此查询速度会很慢:
SELECT GROUP, MIN(LogDT) FROM TABLE as T WHERE T.Item=59 GROUP BY t.GROUP
我怀疑你的第一个查询很快,因为组GR1包含的项目少于其他组:
SELECT GROUP, MIN(LogDT) FROM TABLE as T WHERE T.Item=59 AND t.GROUP='GR1'
但如果您尝试按其他组(例如GR2,GR3,...)进行过滤,则可能会降低性能。
您可以尝试使用此代码,但我认为它不会有所改进:
SELECT GROUP, MIN(LogDT) FROM TABLE as T
WHERE T.Item=59 AND t.GROUP IN (SELECT DISTINCT GROUP FROM TABLE)
GROUP BY t.GROUP
提高效果的唯一方法是在Item
列添加索引。