数据库索引个人笔记

索引

Mysql的索引比如一本书的目录,它能让你更快找到你想要的内容。索引并不是越多越好,建立索引需要耗费磁盘空间,同时在对索引的维护上会消耗数据库的性能,对于查找频率高并且数据库数据量大的数据建立索引能够提高查找的性能。
索引的结构
索引主要有两种结构,分别是B+TREE索引HASH索引

B+TREE

B+TREE是MySql使用最多的一种索引结构。
InnodbMyisam存储引擎模式的索引类型。
由于所有索引数据都存储在叶子结点上,并且增加了顺序访问指针,每个叶子结点都有指向相邻兄弟(叶子)节点的指针,又因为叶子上的数据是顺序存储的,因此在区间查询上有更高的效率。比如查找18~49的数据,只需找到19,然后顺着结点和指针顺序遍历可以访问到所有需要的数据的叶子结点。
并且B+树本身就是为了减少磁盘的I/O读取而在二叉查找树上的基础上改进的一种树,可以大大减少磁盘I/O的读取次数
B+树

HASH

Memory表的默认索引类型,Mysql中只有Memory存储引擎(Memory表只存储于内存中,断电会消失,用于临时表)支持hash索引。
对于查询单条记录的场景,hash索引比B+RREE索引且有更高的效率。
hash

B+TREE和HASH索引结构的对比

对于查询单条记录,HASH索引具有更高的性能。
对于需要区间查询以及数据排序的场景下,B+TREE更能满足要求。

索引类型

1、 普通索引 INDEX
2、 唯一索引 UNIQUE INDEX
3、 主键索引 PRIMARY KEY
4、 组合索引 INDEX(column1,column2,…)
5、 全文索引 FULLTEXT

普通索引

最普通的索引,没有任何限制。

唯一索引

索引值必须唯一,但允许空值。

主键索引

一种特殊的索引,一个表只能有一个主键,索引值唯一,不允许有空值。

组合索引

指多个字段上创建的索引,列个组合必须唯一,使用组合索引时遵循最左前缀集合,只在查询条件中使用了创建索引时的第一个字段(也有人叫它做引导列,比有(col1,col2,col3,…),其中col1就是引导列)时,索引才会被引用。
举个例子:create index index_name on table_name(col1,col2,col3,…)
下面的查询语句会使用索引:
1. where col1=
2. where col1 = ? And col2 = ?
3. where col2 = ? and col1 = ?
下面查询语句不会使用索引:
1. where col2 = ?
2. where col3 = ?
3. where col2 =? And col3 =?

全文索引

只能用在Innodb和Myisam的存储引擎上。在Innodb只能用在char/varchar/text的字段上。
这个内容有点大,单独开一篇来写。

猜你喜欢

转载自blog.csdn.net/programmer_v/article/details/80948104