InnoDB支持的索引
- B+树索引
- 全文索引
- 哈希索引(自适应)
说说B+树吧
B+树就是一种平衡搜索树。所有的记录节点都按照键值从小到大顺序放在同一层的叶子节点上,如下图所示
聚集索引和辅助索引
假设有个表如下:
聚集索引就是用每个表的主键构造一课B+树。每个叶子节点里放表的行数据,并且每个叶子在不同的磁盘上面
- 如下图所示:如果要查找id=5的数据,那么先把磁盘0读入内存,然后用二分法查找id=5的数在3和6之间,然后通过指针p1查找到磁盘2的地址,然后将磁盘2读入内存中,用二分查找方式查找到id=5的数据
辅助索引的叶子节点里不包含一行数据的全部数据。如果要找一个完整的行数据,可以通过辅助索引找到指向主键索引的指针,然后去聚集索引里找到完整行数据
- 如下图所示:如果要查找到name = 小徐,首先将磁盘0加载到内存中,然后用二分查找的方法查到在指针p1所指的地址上,然后通过指针p1所指的地址可知道在磁盘2上面,然后通过二分查找法得知小徐id=4。然后在根据id=4将磁盘0加载到内存中,用上述聚集索引的方法找到完整的行数据
如何创建和删除索引
- 一开始创建数据库的时候,会创建主键的聚集索引,之后需要手动加入其他属性(列)的索引。对于不常查询的属性,不需要建立索引,会降低更新操作的速度
再说说自适应哈希索引吧
- 这是数据库自动创建的,不能手动创建
- 只能用于精准查找,如
SELECT ... FROM TABLE WHERE col_name = 'xxx'
最后说说全文索引吧
LIKE 'xxx%'
这种是可以用B+树索引的,但是LIKE '%xxx%'
就不行,所以需要全文索引- 以前InnoDB不支持全文索引,现在的版本支持了
- 在这里仅作了解,等以后再深入研究