mysql随记

myisam:
索引都单独建立索引表,使用B+树,互不相关,索引里存储的是数据地址
比如ID为主键,name建立索引,此时会有2个索引表,主键和name都有一张,当根据where name = ?的时候,就会直接查找name索引表,查询select age from user where name =? 此时直接能拿到数据,所以速度快

innodb:
主键单独建立一张索引表,使用B+树,存储的是数据地址
其他索引单独建索引表,使用B+树,存储的是主键id,根据id回主键索引表查找数据,如果有现成的就不需要回表操作
比如
有索引id,name
select name from user where nam=? 此时可以直接从索引表拿到数据,就不需要回表再去主键索引表拿数据
select name ,age from user where name = ? 此时因为索引表里没有age,所以需要拿到主键值,在回表操作,拿到数据
所以这就是为什么select * 不推荐的原因
引用 > https://www.cnblogs.com/balfish/p/8288891.html

索引最左匹配原则:
从左到右,一个个匹配,匹配不上的时候就断掉了
比如联合索引( name,phone)
select phone from user where phone = ? name就会出现没有使用索引的结果,因为索引的建立是name在左边,要使用到phone索引的话,where后面必须要有name条件

posted @ 2021-04-14 16:14  自律のalive  阅读(25)  评论(0)    收藏  举报