索引就是帮助SQL高效获取数据的排好序的数据结构
索引数据结构
一般就是
B+Tree(最常见)
Hash(不支持范围查找)
MyISAM(非聚集索引)
存储一张表有三个文件,
table.frm -- 表结构信息
table,MYD --表数据,MyISAM存储引擎
table.MYI --表索引,索引的结构是B+Tree结构
select * from table where id =10;
查找过程先看这个字段是不是索引,如果是索引就去查找table.MYI文件中快速找到索引,然后拿到对应的数据的地址,然后去MYD文件里面拿到具体的数据返回,如果不是索引就只能全表扫描
innodb
存储一张表有两个对应文件
table.frm
table,ibd --存放了索引元素还放了数据元素
innodb存储引擎的主键索引是一个(聚集索引)
创建的其他索引存储会指到主键上。
一般我们使用innodb都会创建主键,并且推荐使用整型的自增主键,
因为如果我们不去创建主键的话,因为innodb数据和索引是存在一个文件里的,他就会帮我们去做这个事情,找到一列不重复的数据,如果没有不重复的数据,他就加一列我们看不到的数据作为索引主键去构建.ibd文件。整型比较大小比较快,且整型占用磁盘比价小
联合索引
联合索引是由多个字段组成的索引,也叫组合索引,
最左前缀原则,
对于上面的表
下面三条sql走索引的只有第一条走了索引,就是因为最左前缀原则,组合索引使用字段必须是连续的,不能跳着用。
EXPLAIN查看SQL的执行计划
联合索引创建索引构建的时候就是按照字段的顺序