mysql - 如何使用mysql更快地计算行数
问题描述
uid
如果没有人购买 display ,我想计算总买家数0
。以及zbuy
总购买。当我将其包含在查询中时 - ifnull(count(distinct b.uid),0)as zuid
。与没有它的 0.001 相比,处理时间增加到 14 秒。
那么,有没有什么方法可以在不包含在查询中的情况下更快地计算这些变量?我对mysql不太好,所以除此之外我不知道有多少选择。
select t.*,
t.hdate, t.title,
ifnull(count(distinct b.uid),0) as zuid,
ifnull(sum(b.buy),0) as zbuy
from product_today t
left join product_today_buy b on b.hid=t.hid
where date(t.dtime)=?
group by t.sid
order by t.dtime desc
Whileproduct_today
是当天销售的产品清单。哪个商店的产品名称和数量。product_today_buy
与存储来自客户的订单。这将比较每个产品的库存product_today
。
我想在表中包含 2 列 -zuid
和zbuy
. 两列都是根据两个表的数据计算得出的。
解决方案
第一个表现红旗是
where date(t.dtime)=?
那不是“可悲的”;将其更改为
WHERE t.dtime >= ?
AND t.dtime < ? + INTERVAL 1 DAY
(并在装订时提供两次日期)
然后有这个索引product_today
:
INDEX(dtime)
这可能是不恰当的:
SELECT t.* ... group by t.sid
仅当所有其他列都t
依赖于时才合适sid
。这意味着这sid
是PRIMARY KEY
; 是吗?请提供
SHOW CREATE TABLE t;
嗯……
select t.*,
t.hdate, t.title,
那交付hdate
两次title
。你真的想要那个吗?
对于b
, 有
INDEX(hid, uid, buy)
推荐阅读
- swift - 有没有办法在 swiftui 中集成 Mapbox Search UI SDK 和 Maps SDK
- python - Flask 会话在请求之间不保存数据
- wordpress - 如何从 wp_content 外部排队 wordpress 样式
- flutter - 你如何正确地等待飞镖中的多个异步方法?
- python - 为什么当我尝试连接另一台设备时显示 getaddrinfo 失败?
- go - 如何在 Go 中验证 JWT 令牌并将其加载到结构中?
- python - 当表值为 NaN 时跳过写入日期帧
- android - 我们可以再在 android 11 中创建文件夹吗?
- django - DRF 通过 Viewset 接口更新产品价格
- xaml - 在 Xamarin AppShell TabBar 图标属性中使用 FontAwesome 或任何其他 webfonts