作者回复: 1. 正常是会自己找到合理的,但是用前explain是好习惯哈
2. 这个问题的展开我放到答疑文章中哈
3. 这也是好问题,需要分析是使用哪种算法,也放到答疑文章展开哈。
新年快乐~
作者回复: 👍
作者回复: 对,好问题,用了order by就不用MRR了
作者回复: 不需要手动排序
不过5万个值太凶残了,语句太长不太好
这种就是手动创建内存临时表,建上hash索引,填入数据,然后join
作者回复: 新年快乐,分析得很好。
可以再补充一句,会更好理解你说的这个过程 :
如果采用BKA进行优化,每多一个join,就多一个join_buffer
作者回复: 嗯,这个跟我们第十篇那个例子挺像的
我们把limit 1 改成limit 100的时候,MySQL认为,要扫描到“100行那么多”,
你这里是limit 5000,200, 这个5000会让优化器认为,选txsj会要扫“很多行,可能很久”
这个确实是优化器还不够完善的地方,有时候不得不用force index~
作者回复: 固态硬盘的顺序写还是比随机写快的
作者回复: 👍 很深入的思考哈
1. select * ,所以放整行;你说得对,select * 不是好习惯;
2. 第一次join后就筛选;第二次join再筛选;
新春快乐~
作者回复: 对的,👍细致
已经发起勘误,谢谢你哦,新年快乐
作者回复: 这正常的,一种可能是这样的:
Using where 就是顺序扫,但是这个上要扫很久才能扫到满足条件的20个记录;
虽然有filesort,但是如果参与排序的行数少,可能速度就更快,而且limit 有堆排序优化哦
作者回复: 如果是非随机的主键,确实没必要了😅
优化第一步还是应该把主键处理一下
作者回复: 你这两个语句是一样的。。是不是第二个语句多了left?
left join因为语义上要求所有左边表的数据行都必须存在结果里面,所以执行流程不太一样,我在答疑文章中说哈
作者回复: 👍
作者回复: 1. 通过普通索引也会,InnoDB的访问模式都是先内存,不在内存中,才到磁盘找;
2. 是以数据页的方式读到内存的,然后在从内存的这个数据页(默认16k)里面找到数据。
作者回复: 你说得对^_^ 第37篇就是,新年快乐
作者回复: 你说得对,多谢
发起勘误了
新年快乐