加入收藏 | 设为首页 | 会员中心 | 我要投稿 92站长网 (https://www.92zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL有哪些索引,及如何创建索引?

发布时间:2022-10-15 13:30:45 所属栏目:MySql教程 来源:网络
导读: MySQL索引有哪些,及如何创建索引? 1.了解索引
1、索引是什么?
在MySQL中,索引是一种增强式的存在,这表示即使没有索引,MySQL的功能并不会受到影响。索引是对数据库表中一列或多列的值

MySQL索引有哪些,及如何创建索引? 1.了解索引

1、索引是什么?

在MySQL中,索引是一种增强式的存在,这表示即使没有索引,MySQL的功能并不会受到影响。索引是对数据库表中一列或多列的值进行排序的一种结构(B树),使用索引可快速访问数据库表中的特定信息。

2、为什么要使用索引?

就是提高查询性能。

3、有哪些索引?

主要分为聚集索引(CLUSTERED INDEX)和非聚集索引(NONCLUSTERED INDEX)两种,聚集索引指的是一列或多列的物理顺序和逻辑顺序是一致的,一个数据库表只能有一个聚集索引,我们通常将主键(一般为自增int型)设为聚集索引。而非聚集索引则可以有多个,而且非聚集索引并不会改变数据库表的物理结构。

2.MySQL索引有哪些? 从数据结构角度

1、B+树索引(O(log(n))):关于B+树索引,可以参考 MySQL索引背后的数据结构及算法原理

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) 聚集索引的缺点是对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索

引的顺序一致,而把记录插入到数据页的相应位置,必须在数据页中进行数据重排,

降低了执行速度。非聚集索引指定了表中记录的逻辑顺序,但记录的物理顺序和索引的顺序不一致MySQL 索引,聚集索引和非聚集索引都采用了B+树的结构,但非聚集索引的叶子层并不与实际的

从逻辑角度

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[asc|desc]

3.如何创建索引

普通索引 添加INDEX

ALTER TABLE table_name ADD INDEX index_name ( column )

主键索引 添加PRIMARY KEY

ALTER TABLE table_name ADD PRIMARY KEY ( column )

唯一索引 添加UNIQUE

ALTER TABLE table_name ADD UNIQUE ( column )

全文索引 添加FULLTEXT

ALTER TABLE table_name ADD FULLTEXT ( column)

如何添加多列索引

ALTER TABLE table_name ADD INDEX index_name ( column1, column2, column3 )

(编辑:92站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!