MySQL ---索引的使用
联合索引最左列字段必须存在,不存在不走索引,但是跟所放位置没有关系,放最后也没关系(where后)
eg: select * from tb_user where substring(phone, 10, 2) = '15');
索引phone失败了,因为存在隐式内容转换
下面的 '%工程‘ 索引失败了,type=ALL , 全表查询
用不用索引,取决于表中数据分布,要查找的数据大部分都在表中,没有使用索引,全表扫描。
针对select 后的查询字段
直接从聚集索引id=2处拿到row
直接从二级索引中得到id值,不需要回表
从二级索引中取到id,name,但是gender取不到,需要根据id去聚集索引中查,用到了回表查询
建立联合索引(username,password) 覆盖索引,可返回id,username,password,不需要回表查询。
计算处合适的前缀长度
从聚集索引中拿到row,还需对比email值是否完成相等,接着还要继续在辅助索引中查找下一个是不是前缀相同,最后把查询到的结果整合返回
降低索引体积,提高索引效率
上面只用了phone索引,name的没有用到,涉及到回表查询,在phone索引表中没有name字段信息
创建联合索引
指定使用联合索引(use index(idx_user_phone_name)
如果查询的是id,phone,name则在二级索引表中能获取到所需信息,不用回表查询