mysql - 两个 sql 语句的计数(*),其中结果是另一个语句的子集
问题描述
我有一个包含约 500 GB 数据的表,并在其上运行了两个查询。
-- Query 1
select Count(*) from table
where C1 = A
-- Query 2
select Count(*) from table
where C1 = A and C2 = B
我觉得Query 2
在整个表上执行是不必要的,因为结果是Query 1
. 是否有任何优化的方法来首先执行Query 1
然后运行Query 2
它的结果,最后返回两个结果的 Count。
解决方案
SELECT
COUNT(*) AS cnt_1,
SUM(c2 = 'B') AS cnt_2
FROM yourTable
WHERE c1 = 'A';
该指数yourTable (c1, c2)
将有所改善。
推荐阅读
- android - 如果响应不成功,RXJava 重复请求并继续流
- spring - 在 RestController 中返回多个对象/dto 的最佳实践
- c# - 我在填充下拉列表时遇到问题,该列表的数据在 asp.net mvc 中的不同模型中引用?
- flutter - Flutter 将 SliverPersistentHeaderDelegate minExtent 设置为子高度
- android - 表 Contacts 没有名为 userId 的列(代码 1 SQLITE_ERROR):
- docker - 我应该为 docker 托管的 DNS 解决方案禁用 systemd-resolve 吗?
- android - RecyclerView ViewHolder 的新 Activity 卡在黑屏上
- android - Android RecyclerView 触发背景选择器/波纹以获取一些滚动视图
- angular - 出现错误:NG0303:无法绑定到“ng-If”,因为它不是“app-grocery”的已知属性
- android-studio - 从具有 ViewPager2 的 Fragment 中的 Fragment 调用方法