如何确保嵌套选择查询的效率?

时间:2014-06-09 20:14:38

标签: mysql sql

Mysql不是我最强的语言!但是我很高兴能够产生一些能够产生正确结果的东西,否则会涉及三个独立的(php)查询。

但我不确定这是否理想。这是查询:

SELECT * FROM
(
    (SELECT sum(price) AS day FROM sales WHERE sold_date > DATE_SUB(NOW(), INTERVAL 1 DAY)) as day,
    (SELECT sum(price) AS week FROM sales WHERE sold_date > DATE_SUB(NOW(), INTERVAL 1 WEEK)) as week,
    (SELECT sum(price) AS month FROM sales WHERE sold_date > DATE_SUB(NOW(), INTERVAL 1 MONTH)) as month
)
WHERE 1

它给出了这个美丽的结果:

+--------+---------+----------+
| day    | week    | month    |
+--------+---------+----------+
| 356.00 | 2393.00 | 11026.00 |
+--------+---------+----------+

我无法快乐。

然而,对于大型数据库,我担心这个查询结构可能太多了?

我如何确保这不是一个资源匮乏?

1 个答案:

答案 0 :(得分:1)

您的查询效率可能非常高。但是,您可以使用条件聚合来尝试:

select sum(case when sold_date > DATE_SUB(NOW(), INTERVAL 1 DAY) then price else 0 end) as "day",
       sum(case when sold_date > DATE_SUB(NOW(), INTERVAL 1 WEEK) then price else 0 end) as "week",
       sum(case when sold_date > DATE_SUB(NOW(), INTERVAL 1 MONTH) then price else 0 end) as "month"
from sales
where sold_date > DATE_SUB(NOW(), INTERVAL 1 MONTH);

sales(sold_date)上建立索引应该有助于查询。 sales(sold_date, price)上的索引应该更好。