题目与狐疑
- # SQL1
- select aid,sum(pv) as num from article_rank where day>=20181220 and day<=20181224 group by aid order by num desc limit 10;
- # SQL2
- select aid,sum(pv) as num from article_rank force index(idx_aid_day_pv) where day>=20181220 and day<=20181224 group by aid order by num desc limit 10;
- SQL1 执行进程中,行使的是全字段排序最后不必要回表为什么总扫描行数还要加上10才对得上?
- SQL1 与 SQL2 group by之后获得的行数都是552203,为什么会呈现 SQL1 内存不足,内里尚有哪些细节呢?
- trace 信息里的creating_tmp_table.tmp_table_info.row_limit_estimate都是838860;计较由来是姑且表的内存限定巨细16MB,而一行必要占的空间是20字节,那么最多只能容纳 floor(16777216/20) = 838860行,而现实我们必要放入姑且表的行数是785102。为什么呢?
- SQL1 行使SQL_BIG_RESULT优化之后,原始表必要扫描的行数会乘以2,背后逻辑是什么呢?为什么仅仅是不再实行往内存姑且内外写入这一步会相差10多倍的机能?
- 通过源码看到 trace 信息内里许多扫描行数都不是现实的行数,既然是现实执行,为什么 trace 信息里不输出真实的扫描行数和容量等呢,好比 filesort_priority_queue_optimization.rows_estimate在SQL1中的扫描行数我通过gdb看到计较法则如附录图 1
- 有没有器材可以或许统计 SQL 执行进程中的 I/O 次数?
【编辑保举】
- 什么影响了数据库查询速率、什么影响了MySQL机能?
- MySQL运维拭魅战之PHP会见MySQL,你行使对了吗
- 记一次神奇的MySQL死锁排查
- 互联网公司口试必问的MySQL标题
- 开拓职员不得不知的MySQL索引和查询优化
【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|