首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从500 m行的MySQL表中获取所选行的AVG值?

从500 m行的MySQL表中获取所选行的AVG值?
EN

Stack Overflow用户
提问于 2022-01-23 15:32:39
回答 1查看 29关注 0票数 0

我在MySQL 8.x中有一张有5亿条记录的表。我获得特定结果集的常规查询是200 My,但是如果我试图获得一个AVG值,性能就会下降到30s+。

结构:

代码语言:javascript
复制
KW_ID | DATE | SERP | MERCHANT_ID | ARTICLE_ID

-- auto-generated definition
create table merchants_keyword_serps
(
    KW_ID       mediumint unsigned                        null,
    MERCHANT_ID tinyint unsigned                          null,
    ARTICLE_ID  char(10)                                  null,
    SERP        tinyint unsigned                          null,
    DATE        date                                      null,
    constraint `unique`
        unique (MERCHANT_ID, ARTICLE_ID, KW_ID, DATE),
    constraint fk_serps_kwd_t
        foreign key (MERCHANT_ID, ARTICLE_ID) references merchants_product_catalog (MERCHANT_ID, ARTICLE_ID)
            on delete cascade,
    constraint keywords
        foreign key (KW_ID) references merchants_keywords (ID)
            on delete cascade
);

create index merchants_keyword_serps_SERP_index
    on merchants_keyword_serps (SERP);

create index mks_date
    on merchants_keyword_serps (DATE);

目标,获得20220122和MERCHANT_ID =2的SERP:

代码语言:javascript
复制
select
       mcs.SERP
FROM merchants_keyword_serps mcs
WHERE date = 20220120
AND mcs.MERCHANT_ID = 2;

此外,还可以为所有商店提供AVG:

代码语言:javascript
复制
select
       mcs.SERP,
       (
        SELECT AVG(SERP)
           FROM merchants_keyword_serps mcs2
           WHERE mcs2.date = 20220120
           AND mcs2.KW_ID = mcs.KW_ID
           AND mcs2.ARTICLE_ID = mcs.ARTICLE_ID) AS SERP_AVG
from  merchants_keyword_serps mcs
WHERE
    date = 20220120
    AND mcs.MERCHANT_ID = 2;

预期的结果将是为所有具有相同KW_ID、DATE、ARTICLE_ID的商店增加一个具有平均SERP值的列。

有什么办法可以用不同的方法来加快速度吗?索引都设置好了,我相信,因为标准查询在unter 200 in中运行得非常快。

EN

回答 1

Stack Overflow用户

发布于 2022-01-24 02:27:27

KW_ID从哪里来?请提供SHOW CREATE TABLE merchants_keyword_serps

在约会中使用20220120是自找麻烦。(我还没有发现任何问题。)

加上以下内容:

代码语言:javascript
复制
INDEX(merchant_id, date)
INDEX(kw_id, article_id, date, serp)

并放弃这些,因为它们将是多余的:

代码语言:javascript
复制
INDEX(merchant_id)
INDEX(kw_id)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70823664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档