小编Jos*_*dan的帖子

在多个范围内高效查询 MAX

在适当排序的索引覆盖的单个范围内执行 MIN() 或 MAX() 时,SQL Server 执行 TOP() 并因此在仅获取一行后返回值。当搜索条件包含多个范围时,SQL Server 会从两个范围中获取所有索引值并进行流聚合,这比对每个子值执行 TOP() 慢得多。

例如,假设每个客户有大量订单,如下所示:

CREATE TABLE orders
(
  customer_id int,
  quantity int
)
Run Code Online (Sandbox Code Playgroud)

运行此查询:

SELECT MAX(quantity) 
FROM orders
WHERE customer_id IN (1,2)
Run Code Online (Sandbox Code Playgroud)

将导致查询所需的时间是仅指定一个客户 ID 时的数倍。

执行上述查询的最有效方法是什么?相关地,如果需要单独的结果(即 GROUP BY customer_id),最好的方法是什么?

SQL小提琴:http ://sqlfiddle.com/#!3/ef0c6/1

performance sql-server-2008 sql-server query-performance

4
推荐指数
1
解决办法
2064
查看次数