1 什么是索引
索引是高效获取数据的排好序的数据结构。
2 MySQL的存储引擎
在使用索引之前,先了解下MySQL的存储引擎,存储引擎是数据库的底层软件组件,用于存储、检索、更新和管理数据。
2.1 MySQL有哪些存储引擎
我们可以通过下面的命令来查看MySQL都支持哪些存储引擎。
show engines;
查询结果如图:
通过查询发现,MySQL默认存储引擎是InnoDB(截图中MySQL使用的版本是8.0.26),据了解,在MySQL 5.5版本之前默认的存储引擎是MyISAM,5.5版本及以后默认的存储引擎是InnoDB,可见InnoDB引擎的优势。
2.2 MySQL数据存储方式
MySQL的数据是使用硬盘来进行存储的,我们可以通过下面的命令来查看MySQL的数据具体存储位置。
show variables like 'datadir';
查询结果如图:
进入目录后双击想要想查看的目录(对应数据库),我们可以看到里边存储着.ibd文件、.MYD文件、.MYI文件、.sdi文件(上文提到,我目前使用的MySQL的版本是8.0)如下图:
各位小伙伴查询之后可能和我的不一样,比如还有.frm文件等,那是因为使用的MySQL版本不一致,工作中使用的还是以5.6和5.7版本的居多,在8.0版本中.frm文件已经不存在了。
2.3 MyISAM和InnoDB的区别
在实际工作中,常用的存储引擎就是InnoDB和MyISAM,那么接下来我们看下两者的区别(以5.7版本为例)。
InnoDB | MyISAM | |
---|---|---|
主键 | 必须有 | 可以没有 |
外键 | 支持 | 不支持 |
事务 | 支持 | 不支持 |
索引 | 聚集索引 | 非聚集索引 |
行表锁 | 支持表级锁、行级锁,默认行级锁 | 仅支持表级锁 |
存储文件 | .frm文件,.idb文件 | .frm文件,.MYD文件,.MYI文件 |
也由此可见,InnoDB引擎中索引结构和数据是存放在一起,而MyISAM引擎中索引结构和数据是分开存放的。
补充:
1)InnoDB中如果没有明确指定创建主键,默认会自动选择一个可以非空且唯一标识数据记录的列作为主键,不存在就生成一个隐含字段作为主键,字段长度为6个字节,类型为长整型;
2)聚集索引:索引结构和数据存放在