索引的创建是否和存储引擎挂钩?
即表示不同的数据在磁盘里不同的存储形式
比如innodb,frm是结构,ibd是数据加上索引
又或者myisam,frm是结构,MYD是数据,MYI是索引
数据结构都是B+树,但是其组织结构是不一样的,在这里又有两个概念,即
聚簇(聚合)索引 :数据和索引是否是放在一起的
非聚簇索引:数据和索引不是放在一起的
innodb
只能有一个聚簇索引,向innodb的表中插入数据是一定要有一个索引的key,如果没有建立索引,那可以是主键索引,如果没有主键索引,那就是表自生成的6字节的rowid(mysql是行的读取)
可以有很多个非聚簇索引
现在知道为什么要去掉数据不需要携带的字段了吧?
innodb支持表锁,又支持行锁
支持外键、支持事物,而myisam不支持,5.7之后mysql表默认就是索引引擎innodb
这里索引下推和最左匹配请自行百度哈哈哈,一般面试当中mysql的索引主要就innodb就可以了
具体的选择和优化要根据自己的业务需求出发考虑,比如mysql所处的服务器内存足够大的时候,innodb是可以的,想知道自行百度