我有带有这些列的表ORDERS:
id ||客户|产品
我想计算ORDERS表中的 N 行数。 N 的大小应足以容纳表格底部的200个不同的客户。我已经使用max(ID)编写了以下查询,但是运行此查询需要太多时间。我认为这不是最优的,因为我有成千上万的行,并且每次必须在整个表上使用group by
来查找ID时:
select count(*) as N from ORDERS where id > (
select top 1 id from
(select distinct top 200 CUSTOMER,max(id) as maxid from ORDERS group by CUSTOMER order by maxid desc) x
order by id asc
)
还有另一种方法可以更好地处理此问题吗?
答案 0 :(得分:0)
这是一个很大的猜测,但这至少会返回结果:
WITH Customers AS(
SELECT TOP 200
CUSTOMER,
MAX(id) AS MaxID
FROM ORDERS
GROUP BY CUSTOMER
ORDER BY MaxID DESC)
SELECT COUNT(*)
FROM ORDERS O
WHERE EXISTS (SELECT 1
FROM Customers C
WHERE C.MaxID = O.id);
如果它返回正确结果,但仍然运行缓慢,请发布表的DDL,并包括索引的DDL。我还建议使用Paste the Plan
发布查询计划