汇总表优化疑问

来源:7-7 特定SQL的查询优化

hjack315

2018-10-19

从执行的角度上看,该语句只需要扫一次大表 SELECT COUNT() FROM product_comment WHERE product_id=999;而
SELECT SUM(cnt) FROM(
SELECT cnt FROM product_comment_cnt WHERE product_id = 999
UNION ALL
SELECT COUNT(
) FROM product_comment WHERE product_id = 999 AND timestr>DATE(NOW())
) a
从里向外要执行3次,优化的点在哪?
直接 SELECT COUNT(*) FROM product_comment WHERE product_id = 999 AND timestr>DATE(NOW()) 使用覆盖索引难道不行吗,为什么要执行那么多子查询。
没有看懂啊老师,麻烦指点下。

写回答

1回答

sqlercn

2018-10-19

第一种方式要对大表进行扫描,而第二种方式利用了统计表,并不需要对大表进行扫描,只需要通过索引把统计表之后产生的评论数量进行统计就可以了。

0
0

MySQL提升课程 全面讲解MySQL架构设计

面面俱到讲解影响MySQL性能的各个因素,让MySQL架构了然于胸。

4419 学习 · 547 问题

查看课程