跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 求教大佬 sql 问题
未分類
8 9 月 2020

求教大佬 sql 问题

求教大佬 sql 问题

資深大佬 : chaodada 2

sql 如下

SELECT sum(money) as money,order_id,ordertime,earning_time FROM `wx_lianmeng_relation` force index(uid)  WHERE uid=726080 and `ordertime`>=1590940800 GROUP BY `order_id` 

当执行该语句时 Copying To Tmp Table 有时候会存在 5-6 秒左右的耗时

这是我的配置 求大佬执教… https://p.pstatp.com/origin/137650001eeb8c64440ad

https://p.pstatp.com/origin/1384400013664b8722789

大佬有話說 (21)

  • 資深大佬 : brader

    你方便使用 `EXPLAIN` 看下你的执行计划,然后贴出来吗?

  • 資深大佬 : VeryZero

    起码发下表结构啊

  • 資深大佬 : wakzz

    表结构和表数据量

  • 資深大佬 : pushback

    SELECT
    model.*,
    (SELECT SUM(money) FROM `wx_lianmeng_relation` WHERE order_id = model.order_id) as money
    FROM
    (
    order_id,
    ordertime,
    earning_time
    FROM
    `wx_lianmeng_relation` FORCE INDEX ( uid )
    WHERE
    uid = 726080
    AND `ordertime` >= 1590940800
    GROUP BY
    `order_id`
    ) as model

    @chaodada 你试试这个,聚合函数和 group by 在处理同一结果集时会变慢,具体还需要看文档,总之先用 model 包一层缩小结果集吧

  • 資深大佬 : justgodlike1993

    新建个(uid,ordertiem,orderid)的索引,避免排序

  • 資深大佬 : justgodlike1993

    @justgodlike1993 看错了 (lll ¬ω¬)

  • 資深大佬 : kiracyan

    歪个 只 group by ‘order_id’ 这个 SQL 可以跑吗

  • 資深大佬 : des

    @kiracyan mysql 是这样的,新版本需要加 ANY_VALUE

  • 主 資深大佬 : chaodada

    @wakzz 感谢大佬的回复 数量大概是 1400w 左右

  • 主 資深大佬 : chaodada

    这个状况 很奇怪 就慢那一次 然后过个一个多小时 就 出现慢一次 然后一直这样子

  • 資深大佬 : MaxFang

    @chaodada 可能是查询缓存。可以发下表结构,如果 uid 有索引的话,理论上不会太多啊,单用户的订单量会有多少呢。

  • 主 資深大佬 : chaodada

    @MaxFang
    @pushback
    @wakzz
    @VeryZero
    @brader

    大佬这是我的一些数据库信息
    执行语句 https://p.pstatp.com/origin/ffb700026afaf0b36868
    执行计划 https://p.pstatp.com/origin/fe8600031c0b5d7967fc
    表结构 https://p.pstatp.com/origin/138170000e2a9775e62a3
    表信息 https://p.pstatp.com/origin/fecb0002c108f6106fd7

  • 資深大佬 : justgodlike1993

    新建个(uid,order_id)的索引,然后看看执行计划还有排序不

  • 資深大佬 : brader

    @justgodlike1993 我觉得建立(uid,order_id)是不起作用的,应该建立(uid,ordertiem)索引,从执行计划以及查询结果综合分析,应该能将扫描行数从 44000 行缩减到 22000 行左右。

    当然,不管是 4 万行,还是 2 万行,mysql 的文件排序,我认为不应如此慢,综合主上面提到的,是偶然亦或规律性出现这样的问题,那么我觉得还应该考虑是否出现了锁等待,比如:是否有某个定时任务。

  • 資深大佬 : gakkiismywife1

    看下是否是在内存中排序还是外部排序,外部排序相对会比较慢

  • 資深大佬 : gakkiismywife1

    @gakkiismywife1 看错了不是排序 哈哈哈

  • 主 資深大佬 : chaodada

    @brader 确实我门这个数据表 读写特别频繁。。。

  • 資深大佬 : wakzz

    用 uid 索引,不慢才怪呢,会对 uid=726080 的所有记录回表。建议对 uid,ordertime,order_id 做联合索引,减少回表次数。

  • 資深大佬 : wakzz

    以及执行一下命令`show global status like ‘%tmp%’;`,看看临时表有多少次是创建了磁盘临时表。磁盘临时表会非常影响性能。

  • 主 資深大佬 : chaodada

    @wakzz #19 感谢大佬的回复,我尝试一下

  • 資深大佬 : MaxFang

    可以按照前面老哥说的方法看看系统临时表的配置,查询的数据要进行 group by 操作,内存中放不下就会使用临时表。至于 file sort 可能是和你强制使用 uid 索引,order by 的又是 order_id 相关。
    这部分可以参考: https://www.cnblogs.com/kramer/p/6703750.html

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具