Mysql支持哪几种索引

Mysql支持哪几种索引,第1张

从数据结构角度

1、B+树索引(O(log(n)))。

2、hash索引:

a 仅仅能满足"=","IN"和"<=>"查询,不能使用范围查询

b 其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引

c 只有Memory存储引擎显示支持hash索引

3、FULLTEXT索引(现在MyISAM和InnoDB引擎都支持了)

4、R-Tree索引(用于对GIS数据类型创建SPATIAL索引)

从物理存储角度

1、聚集索引(clustered index)

2、非聚集索引(non-clustered index)

从逻辑角度

1、主键索引:主键索引是一种特殊的唯一索引,不允许有空值

2、普通索引或者单列索引

3、多列索引(复合索引):复合索引指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用复合索引时遵循最左前缀集合

4、唯一索引或者非唯一索引

5、空间索引:空间索引是对空间数据类型的字段建立的索引,MYSQL中的空间数据类型有4种,分别是GEOMETRY、POINT、LINESTRING、POLYGON。MYSQL使用SPATIAL关键字进行扩展,使得能够用于创建正规索引类型的语法创建空间索引。创建空间索引的列,必须将其声明为NOT NULL,空间索引只能在存储引擎为MYISAM的表中创建

CREATE TABLE table_name[col_name data type]

[unique|fulltext|spatial][index|key][index_name](col_name[length])[asc|desc]

1、unique|fulltext|spatial为可选参数,分别表示唯一索引、全文索引和空间索引;

2、index和key为同义词,两者作用相同,用来指定创建索引

3、col_name为需要创建索引的字段列,该列必须从数据表中该定义的多个列中选择;

4、index_name指定索引的名称,为可选参数,如果不指定,MYSQL默认col_name为索引值;

5、length为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度;

6、asc或desc指定升序或降序的索引值存储

主要有这些:

PRIMARY, INDEX, UNIQUE 这3种是一类

PRIMARY 主键。 就是 唯一 且 不能为空。

INDEX 索引,普通的

UNIQUE 唯一索引。 不允许有重复。

FULLTEXT 是全文索引,用于在一篇文章中,检索文本信息的。

索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索包含多个列。

MySQL索引类型包括:

(1)普通索引

这是最基本的索引,它没有任何限制。它有以下几种创建方式:

◆创建索引

CREATE

INDEX

indexName

ON

mytable(username(length))

如果是

CHAR,VARCHAR类型,length可以小于字段实际长度如果是BLOB和TEXT类型,必须指定

length,下同。

◆修改表结构

ALTER

mytable

ADD

INDEX

[indexName]

ON

(username(length))

创建表的时候直接指定

CREATE

TABLE

mytable(

ID

INT

NOT

NULL,

username

VARCHAR(16)

NOT

NULL,

INDEX

[indexName]

(username(length))

)

删除索引的语法:

DROP

INDEX

[indexName]

ON

mytable

(2)唯一索引

它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:

◆创建索引

CREATE

UNIQUE

INDEX

indexName

ON

mytable(username(length))

◆修改表结构

ALTER

mytable

ADD

UNIQUE

[indexName]

ON

(username(length))

◆创建表的时候直接指定

CREATE

TABLE

mytable(

ID

INT

NOT

NULL,

username

VARCHAR(16)

NOT

NULL,

UNIQUE

[indexName]

(username(length))

)

(3)主键索引

它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引:

CREATE

TABLE

mytable(

ID

INT

NOT

NULL,

username

VARCHAR(16)

NOT

NULL,

PRIMARY

KEY(ID)

)

当然也可以用

ALTER

命令。记住:一个表只能有一个主键。

(4)组合索引

为了形象地对比单列索引和组合索引,为表添加多个字段:

CREATE

TABLE

mytable(

ID

INT

NOT

NULL,

username

VARCHAR(16)

NOT

NULL,

city

VARCHAR(50)

NOT

NULL,

age

INT

NOT

NULL

)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11604165.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存