重庆熊猫 Loading

MySQL教程 - 索引(Index)

更新记录
转载请注明出处。
2022年9月2日 发布。
2022年9月2日 从笔记迁移到博客。

索引

说明

是一种对数据表的一列或多列进行排序的数据结构

索引是单独的、存储在磁盘上的数据库结构

索引包含对表中记录的指针

索引的作用

提高查询速度

索引的缺点

占用磁盘空间、DML操作插入和更新速度减慢,随着数据增加越明显

索引与表

每个表支持16个索引,最小长度为256字节

索引与存储引擎

MySQL中索引的内部存储类型有 B-Tree 和 HashTable

InnoDB、MyISAM引擎只支持B-Tree

Memory引擎默认为HashTable,支持两种类型

索引分类

普通索引

普通索引是MySQL中的基本索引类型,允许在定义索引的列中插入重复值和空值

唯一索引

索引列的值必须要唯一,但允许有空值

主键是一种特殊的唯一索引,不可以为空

使用UNIQUE关键字定义唯一索引

主键索引

是一种特殊的唯一索引,不允许有空值,一张表只能有一个

组合索引

在表的多个字段组合上创建的索引

只有在查询条件中使用了这些字段左边的字段时索引才会被使用

索引列的组合必须唯一

单列索引

单个列上的索引

全文索引

支持在文本中全文查找值

只可以在CAHR、VARCHAR、TEXT类型上使用

只有MyISAM支持

允许在这些索引列中插入重复值和空值

只有MyISAM支持

空间索引

MySQL在5.7之后版本支持空间索引,而且支持OpenGIS几何数据模型

只有MyISAM支持

对空间数据类型字段建立索引

空间数据类型有4中,分别是,geometry,point,linesteing和polygon.

使用spatial关键字进行扩展

必须将其声明为not null

使用索引注意

索引不是越多越好

经常查询的表可以使用索引

避免对经常更新的表进行过多的索引

数据量小的表可以不用索引

在表达式中经常用到的不同值较多的字段建立索引

在频繁排序或分组的字段上建立索引

创建常规索引

CREATE TABLE table_name
(
    [UNIQUE | FULLTEXT | SPATIAL] INDEX <索引名>
    (字段 [(索引长度)] [ASC | DESC],...)
);

或者

ALTER TABLE 表名
ADD [UNIQUE | FULLTEXT | SPATIAL ]  INDEX <索引名>
(列名.. [(索引长度)] [ASC | DESC]);

或者

CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX <索引名>
ON 表名(字段 [(索引长度)] [ASC | DESC],...);

创建唯一索引

CREATE UNIQUE INDEX user_index
ON user (id);

删除索引

ALTER TABLE 表名 DROP INDEX <索引名>;

或者

DROP INDEX <索引名> ON 表名;

删除主键索引

ALTER TABLE <表名> DROP PRIMARY KEY;

查看索引

SHOW INDEX FROM 表名;

查询结果解释:

字段名 解释
table 表示创建索引的表
non_unique 表示索引非唯一 1代表是非唯一索引 0代表唯一索引
key_name 表示索引名称
seq_in_index 字段在索引的位置
column_name 表示定义索引的列字段
sub_part 表示索引的长度
null 表示该字段是否能为空值
index_type 表示索引类型
posted @ 2022-09-02 08:45  重庆熊猫  阅读(212)  评论(0)    收藏  举报