介绍
利用关键字,就是记录的部分数据(某个字段,某些字段,某个字段的一部分),建立与记录位置的对应关系,就是索引。
索引的作用:是用于快速定位实际数据位置的一种机制。 例如:字典的 检索
索引在mysql
中,是独立于数据的一种特殊的数据结构。
索引一定有顺序(排好序的快速查找结构),记录则不一定。
索引的类型
-
普通索引
是最基本的索引,它没有任何限制。
-
唯一索引
索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
-
主键索引
是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引
-
组合索引
指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合
-
全文索引
主要用来查找文本中的关键字,而不是直接与索引中的值相比较。
fulltext
索引跟其它索引大不相同,它更像是一个搜索引擎,而不是简单的where语句的参数匹配。fulltext
索引配合match against操作使用,而不是一般的where语句加like。它可以在create table,alter table ,create index使用,不过目前只有
char
、varchar
,text
列上可以创建全文索引。值得一提的是,在数据量较大时候,现将数据放入一个没有全局索引的表中,然后再用CREATE index创建fulltext
索引,要比先为一张表建立fulltext
然后再将数据写入的速度快很多。
原理
每种存储引擎的索引都不一定完全相同,也不是所有的存储引擎都支持所有的索引类型,本文介绍mysql
中的四种索引:
-
B+Tree索引
最常见的索引,大部分数据库都支持
-
Hash索引
只有Memory引擎支持,使用场景简单
-
R-Tree索引(空间索引)
使用很少,是
MyISAM
引擎的一个特殊索引类型,主要用于地理空间数据 -
S-Full-text(全文索引)
MyISAM
引擎的一个特殊索引类型,主要用于全文索引,InnoDB
从mysql5.6
之后也开始支持全文索引