索引
定义
索引的定义就是帮助存储引擎快速获取数据的一种数据结构,形象的说就是索引是数据的目录。
索引的分类
- 按「数据结构」分类:B+tree索引、Hash索引、Full-text索引;
- 按「物理存储」分类:聚簇索引(主键索引)、二级索引(辅助索引);
- 按「字段特性」分类:主键索引、唯一索引、普通索引、前缀索引;
- 按「字段个数」分类:单列索引、联合索引;
按物理存储分类
- 聚簇索引(主键索引): 数据都存放在B+树的叶子结点中;
- 非聚簇索引(二级索引、辅助索引):B+树的叶子节点存放的是主键值,而非实际数据;查询数据时,先根据辅助索引查询到主键值,然后根据主键值聚簇索引查询到实际数据;
- 支持范围查询:因为 B+ 树所有叶子节点间还有一个链表进行连接,这种设计对范围查找非常有帮助;
从数据页角度看B+树
https://xiaolincoding.com/mysql/index/page.html
为什么mysql采用B+树作为索引
https://xiaolincoding.com/mysql/index/why_index_chose_bpuls_tree.html
- 单次查询效率高:B+ 树的非叶子节点不存放实际的记录数据,仅存放索引,因此数据量相同的情况下,相比存储即存索引,B+ 树的非叶子节点不存放实际的记录数据,仅存放索引,因此数据量相同的情况下,相比存储即存索引节点的磁盘 I/O次数会更少。
- 插入和删除效率:B+ 树有大量的冗余节点,这样使得删除一个节点的时候,可以直接从叶子节点中删除,甚至可以不动非叶子节点,这样删除非常快;
索引失效有哪些?
https://xiaolincoding.com/mysql/index/index_lose.html
事务
锁
https://xiaolincoding.com/mysql/lock/mysql_lock.html
update没加索引为什么会锁全表?
https://xiaolincoding.com/mysql/lock/update_index.html
死锁发生
https://xiaolincoding.com/mysql/lock/deadlock.html#%E6%AD%BB%E9%94%81%E7%9A%84%E5%8F%91%E7%94%9F
