MySQL管理之索引
序号 | 类型 | 地址 |
---|---|---|
1 | MySQL | MySQL操作之概念、SQL约束(一) |
2 | MySQL | MySQL操作之数据定义语言(DDL)(二) |
3 | MySQL | MySQL操作之数据操作语言(DML)(三) |
4 | MySQL | MySQL操作之数据查询语言:(DQL)(四-1)(单表操作) |
5 | MySQL | MySQL操作之数据查询语言:(DQL)(四-2)(多表查询) |
6 | MySQL | MySQL操作之数据控制语言:(DC)(五) |
7 | MySQL | MySQL操作之数据库函数 |
8 | MySQL | MySQL管理之数据类型 |
9 | MySQL | MySQL管理之索引 |
10 | MySQL | MySQL管理之事务管理 |
11 | MySQL | MySQL管理之存储过程 |
12 | MySQL | MySQL管理之视图 |
13 | MySQL | MySQL管理之数据备份与还原 |
14 | MySQL | Linux(centos 7.5)服务器安装MySQL |
15 | MyBatis | MyBatis从入门到多表关联 |
16 | MyBatis | MyBatis常用方法 |
17 | MyBatis | Mybatis逆向工程的使用(附文件地址) |
18 | MyBatis | spring boot连接Mybatis数据库的配置文件(MySql、SQLserver、Oracle) |
19 | MyBatis-Plus | Mybatis-Plus使用案例(包括初始化以及常用插件) |
20 | MyBatis-Plus | mybatis-plus代码生成器 |
21 | MyBatis-Plus | 自定义SQL |
22 | MyBatis-Plus | Mybatis-Plus(连接Hive) |
23 | MyBatis-Plus | MyBatis-plus配置自定义SQL(执行用户传入SQL) |
24 | MyBatis-Plus | Mybatis-Plus(Service CRUD 接口) |
文章目录
一、简介
数据索引就好比新华字典的音序表。它是对数据表中一列或者多列的值进行排序后的一种结构,其作用就是提高表中数据的查询速度。
虽然索引可以提高数据的查询速度,但索引会占用一定的磁盘空间,并且在创建和维护索引时,其消耗的时间随着数据量的增加而增加的。
二、分类
1.普通索引
普通索引是由KEY或INDEX定义的索引。是MySQL中的基础索引类型,可以创建在任何数据类型中,其值是否唯一和非空由字段本身的约束条件所决定。
2.唯一性索引
是由UNIQUE
定义的索引,该索引所在的值必须是唯一的。
3.全文索引
是由FULLTEXT
定义的索引,它只能创建在CHAR
、VARCHAR
、TEXT
类型的字段上。现在只有MyISAM存储引擎支持全文索引。
4.单列索引
在表中单个字段上创建索引,可以是普通索引、唯一索引或者全文索引,只要保证该索引只对应表中一个字段既可。
5.多列索引
在表中多个字段上创建索引。只有在查询条件中使用了这些字段中的第一个字段时,该索引才会被使用。
6.空间索引
是由SPATIAL
定义的索引,只能创建在空间数据类型的字段上。
MySQL中的空间数据类型有4种。Geometry、Point、LineString和Polygon。
需要注意的是创建空间索引的字段,必须声明其为NOT NULL,并且空间索引只能在存储引擎为MyISAM的表中创建。
三、创建索引
创建索引的索引方法有三种,具体为:
- 创建表时创建索引
- 使用Create Index语句在已经存在的表上创建索引
- 使用Alter Table语句在已经存在的表上创建索引
3.1 创建表时创建索引
CREATE TABLE 表名 (
字段名1 数据类型 约束条件,
字段名2 数据类型 约束条件,
[UUNIQUE|FULLTEXT|SPATIALINDEX|KEY
[别名](字段1[(长度)][AES|DESC])
解释:
- UNIQUE:可选参数,表示唯一索引。
- FULLTEXT:可选参数,表示全文索引。
- SPATIAL:可选参数,表示空间索引
- INDEX和KEY:用来表示字段的索引,二者选一既可。(普通索引)
- 别名:可选参数,表示创建的索引名称。
- 字段名1:指定索引对应字段的名称。
- 长度:可选参数,用于表示索引的长度。
- AES和DESC:可选参数,其中,AES表示升序排列。DESC表示倒序排列。
1.创建普通索引
CREATE TABLE t1 (
id INT,
name VARCHAR (32),
age INT (16),
INDEX (id)
);
查看数据结构
EXPLAIN SELECT * FROM t1 WHERE id =1;
其中,possible_keys和key为id,则证明已经通过id进行查询。
2.创建唯一性索引
CREATE TABLE t2 (
id INT,
name VARCHAR (32),
UNIQUE INDEX unique_id ( id DESC )
)
3.创建全文索引
只有MyIsam存储引擎支持全文索引。
CREATE TABLE t4 (
id INT,
name VARCHAR (32),
FULLTEXT INDEX fulltext_name ( NAME DESC )
) ENGINE = Myisam;
4. 创建单列索引
CREATE TABLE t5 (
id INT,
name VARCHAR (32),
INDEX single_name (name(20))
)
5. 创建多列索引
只有在查询条件中使用了第一个字段时,才会走多列索引。
CREATE TABLE t6 (
id INT,
name VARCHAR (32),
INDEX double_name ( id, NAME(20))
)
6. 创建空间索引
在类型为GEOMETRY的字段上创建空间索引。
创建空间索引时,所在字段的值不能为空值,且表的存储引擎为MyISAM。
CREATE TABLE t7 (
id INT,
name GEOMETRY NOT NULL,
SPATIAL INDEX name(name)
) ENGINE = MyISAM;
3.2 使用Create Index语句在已经存在的表上创建索引
若想在已经存在的表上创建索引,可以使用CREATE INDEX
语句。
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名
ON 表名 (字段名[(长度)] [AES|DESC])
1.创建普通索引
CREATE INDEX index_id ON book(bookid);
2.创建唯一性索引
CREATE UNIQUE INDEX unique_id ON book(bookid);
3.创建单列索引
CREATE INDEX singleidx ON book(bookid);
4.创建多列索引
在表book上,name
、address
列,创建名为mulitidx的多列索引。
CREATE INDEX mulitidx ON book(name(20),address(20));
5.创建全文索引
CREATE FULLTEXT INDEX fulltextidx ON book(bookid);
6.空间索引
在book表的bookid字段,创建名为spatidx的空间索引。
CREATE SPATIAL INDEX spatidx ON book(bookid);
3.3 使用 Alter Table 语句在已经存在的表上创建索引
若想在已经存在的表上创建索引,可以使用CREATE INDEX
语句。
ALTER TABLE 表名 ADD [UNIQUE|FULLTEXT|SPATIAL] INDEX
索引名 (字段名[(长度)] [AES|DESC])
1.创建普通索引
ALTER TABLE book ADD INDEX index_id(bookid);
2.创建唯一性索引
ALTER TABLE book ADD UNIQUE uniqueidx(bookid);
3.创建单列索引
ALTER TABLE book ADD INDEX singleidx(bookid);
4.创建多列索引
为book表authors
和info
字段,添加名称为multidx的多列索引
ALTER TABLE book ADD INDEX multidx(authors(20),info(20));
5.创建全文索引
ALTER TABLE book ADD FULLTEXT INDEX fulltextidx(info);
6.空间索引
ALTER TABLE book ADD SPATIAL INDEX spatidx(spae);
四、删除索引
4.1使用 Alter Table 删除索引
ALTER TABLE 表名 DROP INDEX 索引名
语句:
ALTER TABLE book DROP INDEX fulltextidx;
4.2使用 Drop Index 删除索引
DROP INDEX 索引名 ON 表名;
语句:
DROP INDEX spatidx ON book;
五、Xmind整理
https://download.csdn.net/download/weixin_44624117/23754601