Mysql 如何确保嵌套选择查询的效率?
Mysql不是我最强的语言!但是,我很高兴能够生成一些能够给出正确结果的东西,否则将涉及三个单独的(php)查询 但我不确定这是否理想。以下是查询:Mysql 如何确保嵌套选择查询的效率?,mysql,sql,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_dat
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 |
+--------+---------+----------+
我再高兴不过了
然而,对于一个大型数据库,我担心这个查询结构可能太多了
我如何才能确保这不是一个注定的资源猪 您的查询可能会出人意料地高效。但是,您可以尝试使用条件聚合:
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);
在
销售(销售日期)
上建立索引有助于查询。销售指数(销售日期、价格)应该更好。Wow!我觉得自己就像公主新娘身上的巨人。。。“我做对了…!?”我会插上这个,看看它是否运行得更快。谢谢!