一、什么是索引
索引就好比一本书的目录,能够提高数据的查询效率
二、索引底层
InnoDB引擎中索引的底层数据结构是B+tree
三、索引的分类
1.主键索引
主键索引和主键约束本质上是一样的,只是在不同的场景的不同叫法
创建主键索引(以创建一个学生表为例)
CREATE TABLE student(
id INT(3) PRIMARY KEY auto_increment,//添加主键索引且值递增
username VARCHAR(32),
password VARCHAR(32),
name VARCHAR(32),
age INT(3),
sex VARCHAR(32)
)
2.唯一索引
该字段可以是多个null,但值不能重复
创建唯一索引(将上面学生表的username添加成唯一索引)
ALTER TABLE student ADD UNIQUE(username);//添加唯一索引
3.普通索引
最基本的索引,没有什么限制
创建普通索引(将name添加为普通索引)
ALTER TABLE student ADD INDEX (name);//添加普通索引
删除普通索引
DROP INDEX name ON student;//删除普通索引
4.全文索引
全文索引(FULLTEXT)仅可以适用于MyISAM引擎的数据表,(Mysql5.5版本不支持)
四、索引的优缺点
优点:查询效率快
缺点:更新数据时,会改变索引的数据结构
当批量更新数据时,这个缺点就会被放大,解决方案:先删除索引,再更新数据,更新完后再添加索引
五、索引分类
索引分为两类
一类是聚簇索引(主键索引),一类是非聚簇索引(除主键索引外)
区别:聚簇索引的叶子结点存放的是数据
非聚簇索引的叶子结点存放的是主键
六、索引失效问题
索引何时失效?
1.当SQL语句发送给Mysql时,Mysql会自动判断是走索引快还是不走索引快
2.模糊查询可能导致索引失效
3.联合索引可能导致索引失效