什么是MySQL
MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言–结构画查询语言(SQL)进行数据库管理。
MySQL常用的存储引擎
- InnoDB:事MySQL的默认存储引擎,支持事务、行锁和外键等操作。
- MyISAM:是MySQL5.1版本前的默认存储引擎,MyISAM的并发性比较差,不支持事务和外键等操作,默认锁的粒度为表级锁。
数据库的三大范式
- 第一范式:确保每列保持原子性,数据表中的所有字段值都是不可分解的原子值。
- 第二范式:确保表中的每列都和主键相关。
- 第三范式:确保每列都和主键列直接相关而不是间接相关。
MySQL的数据类型
索引
什么是索引
索引是对数据库表的一列或者多列的值进行排序的一种结构,使用索引可以快速访问数据表中的特定信息
索引的优缺点
优点:
- 大大加快数据检索的速度
- 将随机I/O变成顺序I/O(因为B+树的叶子节点是连接在一起的)
- 加速表与表之间的连接
缺点:
- 从空间角度考虑,建立索引需要占用物理空间
- 从时间角度考虑,创建和维护索引都需要花费时间,例如对数据进行增删改时都需要维护索引。
索引的数据结构
索引的数据结构主要有B+树和哈希表,对应的索引分别为B+树索引和哈希索引。InnoDB引擎的索引类型有B+树索引和哈希索引,默认的索引类型为B+树索引。
- B+树索引
在B+树中,所有的记录节点都是按照键值大小的顺序放在叶子节点上,如图 由上图可以看出,因为B+树具有有序性,并且所有的数据都存放在叶子节点,所以查找效率很高,支持排序和范围查找。 - 哈希索引
哈希索引是基于哈希表实现的。对于每一行数据,存储引擎会对索引列通过哈希算法进行哈希计算得到哈希码,并且哈希算法要尽量保证不同的列值计算出的哈希码是不同的,将哈希码的值作为哈希表的key值,将指向数据行的指针作为哈希表的value值。这样查找一个数据的时间复杂度就是o(1),一般多用于精确查找。
Hash索引和B+树的区别
哈希索引一般用多于精确的等值查找,B+索引多用于除了精确的等值查找外的其他查找,大多数情况下,会选择B+树索引。
- 哈希表不支持排序。因为哈希表是无序的
- 哈希表不支持范围查找。
- 哈希索引不支持模糊查询及多列索引的最左前缀匹配
- 哈希表中存在哈希冲突,所以哈希索引的性能是不稳定的,而B+树的性能是相对稳定的,每次查找都是从根节点到叶子节点。
索引的类型
索引的种类
B树和B+树的区别
B树和B+树最主要的区别有两点:
数据库为什么使用B+树而不是B树
聚簇索引和非聚簇索引
非聚簇索引一定会进行回表查询吗
索引的使用场景有哪些
索引的设计原则
如何对索引进行优化
如何创建/删除索引
使用索引查询时性能一定会提升吗
不一定,因为创建和维护索引需要花费空间和时间上的代价,如果不合理使用索引反而会使查询性能下降。
什么是前缀索引
什么是最左匹配原则
索引在什么情况下会失效
|