实习倒数第二天,偶然间查了查自己的写的sql语句性能有没有问题。
select COL1,COL2,COL3 from inf_log where CODE ='AAA' and ORDER_ID='123456';
上述字段中,code与order_id都被设置为索引IDX_MIAN_ID,IDX_CODE。也就是说,正常情况下这两个索引应该是都会命中
公司实现了表的水平分片把inf_log分成了20+个表。
explain select COL1,COL2,COL3 from inf_log where CODE ='AAA' and ORDER_ID='123456';
而查出来的结果却显示,只有一个表是命中两个索引的,其余的都只是命中了一个索引,百思不得其解。
explain select COL1,COL2,COL3 from inf_log
通过上述sql我发现这个命中两个索引的表的数据量远高于其他表的数据量:其他表的rows最多是千位级别,而这个命中两个索引的表row为十万级别
也就是说,当数据量过小的时候,MySQL的查询优化器会取用单个索引搜索就够了;当数据量达到一定量时,MySQL的查询优化器会认为联合索引的查询更有效进而选择更多key,将type从type由普通索引ref改为索引合并index_merge
标签:key,explain,索引,数据量,MySQL,type,log From: https://www.cnblogs.com/kun1790051360/p/18398794