数据库有几百万行。
这是为了找到价格高于平均价格的产品:
SELECT ProductName, Price FROM Products
WHERE Price > (SELECT AVG(Price) FROM Products);
但是,速度相当慢。
我认为这是因为它重新计算了每一行的平均值。
有没有办法优化这个查询?
尝试了几种不同类型的查询,但我认为我遗漏了一些东西。
速度缓慢确实是由于计算每一行造成的。
WITH AvgPrice AS (
SELECT AVG(Price) AS AvgPrice FROM Products
)
SELECT p.ProductName, p.Price
FROM Products p, AvgPrice ap
WHERE p.Price > ap.AvgPrice;
此方法使用
WITH
创建一个“CTE”,计算一次平均价格。然后,它使用该值与每种产品的价格进行比较。效率更高。