常见问题:
1.为什么要使用索引?
数据查询最简单的方式就是全表扫描,即将整张表的数据,或者分批次加载到内存当中,存储的最小单位是块或者页,它们是由多行数据来组成的,将这些块都加载进来,并逐个轮寻,找到需要的目标,并返回。
而这种方式在查找大量的数据时,是会非常慢的,但是在只有几十行的少量数据时,直接加载到内存中扫描,要比索引的方式要快,当然一般数据量都是非常大的,这种方法并不适用。
所以,出现了适用与大量数据的方式:索引,(类似字典,根据关键信息 偏旁部首就可以快速查到目标信息)
2.什么样的信息能成为索引?
主键、唯一键以及普通键等。
3.索引的数据结构:(有了索引还不足够,还需要以一定的逻辑结构组织起来,才能让我们检索的更高效。)
生成索引,建立二叉查找树进行二分查找。(还有平衡二叉树、红黑树)时间复杂度O(logN) 线性树查找效率要低一些 为 N
生成索引,建立B-Tree结构进行查找 (根节点至少包括两个孩子,树中每个节点最多含有m个孩子(m>=2),即m阶B-Tree,除根节点和叶节点外,其他每个节点至少有ceil(m/2)个孩子,所有叶子节点都位于同一层)
生成索引,建立B+ -Tree结构进行查找(MySQL的索引就主要是通过这种方式实现的) B+树更适合用来做存储索引:B+树的磁盘读写代价更低 、B+树的查询效率更加稳定、B+树更有利于对数据库的扫描
生成索引,建立Hash结构进行查找
4.密集索引和稀疏索引的区别
密集索引文件中的每一个搜索码值都对应一个索引值
稀疏索引文件只为索引码的某些值建立索引项
MyISAM:不管是主键索引、唯一键索引、普通索引 均属于稀疏索引
InnoDB:必须有且仅有一个密集索引(索引选取规则如下:)
两种引擎索引示意图:
innodb的表结构是一个.frm中存储的,它的索引与数据一起存储在另一个.idb文件中的。
myisam的表结构也是存储在一个.frm文件中的,但是它的索引与数据是分开存储在两个文件中的,前者存储在一个.MYI文件中,后者存储在一个.MYD文件中。