SQL:最小化子查询/分区中的行

时间:2014-08-06 13:30:14

标签: sql sql-server

所以这是一件奇怪的事情。我对数据库的访问权限有限 - 这里最相关的限制是,如果我创建一个查询,则返回最多10,000行。

无论如何,我一直试图让查询返回个别案例详细信息,但仅在繁忙时间 - 例如,在一小时内有50多个案例被处理。所以,我插入了以下一行:

COUNT(CaseNo) OVER (PARTITION BY DATEADD(hh, 
         DATEDIFF(hh, 0, StartDate), 0)) AS CasesInHour

...然后将其用作子查询,仅选择那些案例where CasesInHour >= 50

然而,事实证明10,000行限制会影响分区 - 当我试图运行更长时间时没有出现任何问题,因为它只是在一个(相当随机的)小得多的选择中计算任何给定小时内的情况

任何人都可以想办法绕过这个限制吗?返回的最终总数将远远低于10,000行,但它将远远超过10,000作为起点。

1 个答案:

答案 0 :(得分:0)

如果这是我们正在讨论的MySQL,sql_big_selectsmax_join_size会影响检查的行数,而不是“返回”的行数。因此,您需要通过更具选择性和使用适当的索引来减少检查的行数。

例如,以下查询可能正在检查超过10,000行:

SELECT * FROM stats

要限制选择性,您可能只想获取过去30天内的行:

SELECT * FROM stats
WHERE created > DATESUB(NOW(), INTERVAL 30 DAY)

但是,如果created列上有索引,并且索引的基数足以减少检查的行数,这只会减少检查的行数。