MySql 索引、锁、事务知识点小结索引、锁、事务知识点小结
本文总结了MySql 索引、锁、事务知识点。分享给大家供大家参考,具体如下:
1. 索引索引
索引,类似书籍的目录,可以根据目录的某个页码立即找到对应的记录。
索引的优点:
天生排序。
快速查找。
索引的缺点:
占用空间。
降低更新表的速度。
注意点注意点:小表使用全表扫描更快,中大表才使用索引。超级大表索引基本无效。
索引从实现上说,分成索引从实现上说,分成 2 种:聚集索引和辅助索引(也叫二级索引或者非聚集索引)种:聚集索引和辅助索引(也叫二级索引或者非聚集索引)
从功能上说,分为从功能上说,分为 6 种:普通索引,唯一索引,主键索引,复合索引,外键索引,全文索引。种:普通索引,唯一索引,主键索引,复合索引,外键索引,全文索引。
详细说说 6 种索引:
普通索引:最基本的索引,没有任何约束。
唯一索引:与普通索引类似,但具有唯一性约束。
主键索引:特殊的唯一索引,不允许有空值。
复合索引:将多个列组合在一起创建索引,可以覆盖多个列。
外键索引:只有InnoDB类型的表才可以使用外键索引,保证数据的一致性、完整性和实现级联操作。
全文索引:MySQL 自带的全文索引只能用于 InnoDB、MyISAM ,并且只能对英文进行全文检索,一般使用全文索引引擎(ES,Solr)。
注意注意:主键就是唯一索引,但是唯一索引不一定是主键,唯一索引可以为空,但是空值只能有一个,主键不能为空。
另外,InnoDB 通过主键聚簇数据,如果没有定义主键且没有定义聚集索引, MySql 会选择一个唯一的非空索引代替,如果没有这样的索引,会隐式定义
个 6 字节的主键作为聚簇索引,用户不能查看或访问。
简单点说:简单点说:
设置主键时,会自动生成一个唯一索引,如果之前没有聚集索引,那么主键就是聚集索引。
没有设置主键时,会选择一个不为空的唯一索引作为聚集索引,如果还没有,那就生成一个隐式的 6 字节的索引。
MySql 将数据按照页来存储,默认一页为 16kb,当你在查询时,不会只加载某一条数据,而是将这个数据所在的页都加载到 pageCache 中,这个其实
和 OS 的就近访问原理类似。
MySql 的索引使用 B+ 树结构。在说 B+ 树之前,先说说 B 树,B 树是一个多路平衡查找树,相较于普通的二叉树,不会发生极度不平衡的状况,同时也
是多路的。
B 树的特点是:他会将数据也保存在非页子节点。
看图可知:
而这个特点会导致非页子节点不能存储大量的索引。
而 B+ Tree 就是针对这个对 B tree 做了优化。如下图所示: