MOP 系列|MOP 三种主流数据库索引简介(二)
前 言
MOP 不用多说了,我这里指的就是 MySQL、Oracle、PostgreSQL 三种目前最主流的数据库,MOP 系列打算更新 MOP 三种数据库的索引知识、高可用架构及常用 SQL 语句等等,今天打算介绍一下这三种数据库的索引基础知识,但由于文章过长,前面已经分享了 Oracle 篇,今天分享 MySQL 篇。
MySQL 索引类型
索引原理
MySQL默认存储引擎 innodb 只显式支持 B-Tree( 从技术上来说是B+Tree)索引,对于频繁访问的表,innodb 会透明建立自适应 hash 索引,即在B树索引基础上建立hash索引,可以显著提高查找效率,对于客户端是透明的,不可控制的,隐式的。B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B+树中的B代表平衡(balance),而不是二叉(binary),因为 B+ 树是从最早的平衡二叉树演化而来的。二叉树具有以下性质:左子树的键值小于根的键值,右子树的键值大于根的键值。
MySQL 默认 innodb 存储引擎就是使用B+树来实现索引结构的。由于内节点(非叶子节点)不存储 data,所以一个节点可以存储更多的内节点,每个节点能索引的范围更大更精确。也就是说使用B+树单次磁盘IO的信息量相比较B树更大,IO 效率更高。
非唯一索引
索引值可以出现多次(默认索引类型)
唯一索引
索引值必须唯一或为NULL
ALTER TABLE tab_name ADD UNIQUE (col_name);
CREATE UNIQUE INDEX idx_tname_2 ON tablename(col_name);