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
1
brader 2020-09-14 14:04:29 +08:00
你方便使用 `EXPLAIN` 看下你的执行计划,然后贴出来吗?
|
2
VeryZero 2020-09-14 14:49:08 +08:00 1
起码发下表结构啊
|
3
wakzz 2020-09-14 15:49:12 +08:00 1
表结构和表数据量
|
4
pushback 2020-09-14 16:30:23 +08:00 1
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 包一层缩小结果集吧 |
5
justgodlike1993 2020-09-14 16:42:20 +08:00 1
新建个(uid,ordertiem,orderid)的索引,避免排序
|
6
justgodlike1993 2020-09-14 16:52:28 +08:00 1
@justgodlike1993 看错了 (lll ¬ω¬)
|
7
kiracyan 2020-09-14 17:04:35 +08:00 1
歪个楼 只 group by 'order_id' 这个 SQL 可以跑吗
|
10
chaodada OP 这个状况 很奇怪 就慢那一次 然后过个一个多小时 就 出现慢一次 然后一直这样子
|
12
chaodada OP |
13
justgodlike1993 2020-09-15 10:12:06 +08:00
新建个(uid,order_id)的索引,然后看看执行计划还有排序不
|
14
brader 2020-09-15 10:40:41 +08:00
@justgodlike1993 我觉得建立(uid,order_id)是不起作用的,应该建立(uid,ordertiem)索引,从执行计划以及查询结果综合分析,应该能将扫描行数从 44000 行缩减到 22000 行左右。
当然,不管是 4 万行,还是 2 万行,mysql 的文件排序,我认为不应如此慢,综合楼主上面提到的,是偶然亦或规律性出现这样的问题,那么我觉得还应该考虑是否出现了锁等待,比如:是否有某个定时任务。 |
15
gakkiismywife1 2020-09-15 11:36:25 +08:00
看下是否是在内存中排序还是外部排序,外部排序相对会比较慢
|
16
gakkiismywife1 2020-09-15 11:37:16 +08:00
@gakkiismywife1 看错了不是排序 哈哈哈
|
18
wakzz 2020-09-15 17:33:15 +08:00
用 uid 索引,不慢才怪呢,会对 uid=726080 的所有记录回表。建议对 uid,ordertime,order_id 做联合索引,减少回表次数。
|
19
wakzz 2020-09-15 17:37:08 +08:00
以及执行一下命令`show global status like '%tmp%';`,看看临时表有多少次是创建了磁盘临时表。磁盘临时表会非常影响性能。
|
21
MaxFang 2020-09-15 21:30:49 +08:00
可以按照前面老哥说的方法看看系统临时表的配置,查询的数据要进行 group by 操作,内存中放不下就会使用临时表。至于 file sort 可能是和你强制使用 uid 索引,order by 的又是 order_id 相关。
这部分可以参考: https://www.cnblogs.com/kramer/p/6703750.html |