首页 > 解决方案 > 如何使用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 列 -zuidzbuy. 两列都是根据两个表的数据计算得出的。

标签: mysql

解决方案


第一个表现红旗是

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。这意味着这sidPRIMARY KEY; 是吗?请提供

SHOW CREATE TABLE t;

嗯……

select  t.*,
        t.hdate, t.title,

那交付hdate两次title。你真的想要那个吗?

对于b, 有

INDEX(hid, uid, buy)

推荐阅读