MySQL索引、锁与事务

时间:2020-07-24 16:14:37   收藏:0   阅读:80

MySQL索引、锁与事务

引子

总结一些自己的理解,作为备忘。

MySQL索引

先说说索引吧。数据库需要完成数据的存储、查找、修改等操作。

存储

MySQL默认一个数据页大小是16KB(可以改为32KB等大小),而操作系统一个数据页(段页式)是4KB,MySQL放大四倍的目的在于尽量减少磁盘IO(用户检索范围查询比较多,而一次IO过程中,一页或两页的时间代价接近,约小于10ms),参照局部性预读原理。

查找与修改

这是数据库的核心功能之一,经常在面试中遇到。

在学习数据结构时,常用三种数据结构:顺序数组、哈希表、二叉树,如下图所示:

技术图片

技术图片

分析一下B+树的性质:

  1. IO次数取决于树的层高H,假设当前表的数据总量是N,数据块大小是M,则H=log(M+1)*N。在常规场景下,假设N不变,数据块越大,树的层高越低,MySQL中层高一般是4左右。
  2. 最左前缀匹配原则。这是非常重要的性质,尤其在组合索引的使用。

在这两大类的索引类型下,还可以将索引分成四个小类:
1,普通索引:最基本的索引,没有任何限制,是我们大多数情况下使用到的索引。

2,唯一索引:与普通索引类型,不同的是唯一索引的列值必须唯一,但允许为空值。

3,全文索引:全文索引(FULLTEXT)仅可以适用于MyISAM引擎的数据表;作用于CHAR、VARCHAR、TEXT数据类型的列。

4,组合索引:将几个列作为一条索引进行检索,使用最左匹配原则。

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!