索引对于MySQL数据库查询速度具有无可取代的作用,一个合适的索引能给数据查询的效率带来巨大的提升,本文来给大家讲讲如何创建索引,索引的最佳创建方式是在建表的时候就确定好要索引的字段并建立好索引。
索引的类型
我们来回顾一下前文讲到的索引的类型,有以下几种:
1.普通索引(Normal):基本索引类型,允许在定义索引的列里插入空值或重复值。
2.唯一索引(Unique):索引列值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。主键索引是一种特殊的唯一索引,不允许有空值
3.单列索引:只包含一个列的索引,一个表中可以有多个
4.组合索引:包含多个列的索引,查询条件包含这些列的最左边的字段的时候,索引就会被引用,遵循最左缀原则
5.全文索引(Full Text):在定义的值中支持全文查找,允许空值和重复值,可以在CHAR,VARCHAR或者TEXT字段类型上创建,仅支持MyISAM存储引擎
6.空间索引:针对空间数据做的索引,支持的数据类型有4种,分别是GEOMETRY,POINT,LINESTRING和POLYGON。创建空间索引的列必须声明为非空值(NOT NULL),仅支持MyISAM存储引擎
创建普通索引
# 1.创建普通索引示例
CREATE TABLE test_1 (
id INT NOT NULL,
num INT NOT NULL,
test_name VARCHAR (50) NOT NULL,
INDEX (num) #此处为创建普通索引的命令行
);
创建表语句运行结果
# 2.接下来我们可以使用以下命令查看刚创建的表的结构
SHOW CREATE TABLE test_1;
命令语句查询结果
# 3.还可以使用MySQL的可是话管理工具查看数据表的索引,本猿使用的是Navicat
navicat查看所索引
# 4.接下来我们往表中插入两条数据来用于查看索引是否起到效果(注意一定要两条数据以上才起作用)
测试数据
# 5.插入完数据后使用EXPLAIN命令查看索引是否起作用
EXPLAIN SELECT * FROM test_1 WHERE num=1;
查询结果
查询结果的字段详解
select_type:查询类型,可能的值:SIMPLE,PRIMARY,UNION,SUNQUERY等table:表名,按被读取的先后顺序查询type:与其他表的关系,可能的值:system,const,eq_ref,ref,range,index和Allpossible_key:搜索记录可选用的各个索引key:实际选用的索引key_len:索引按字节计算的长度,ref:行给出关联关系中另一个数据表里的数据列的名称rows:预计读出的行数extra:与关联操作相关的信息创建唯一索引
# 1.创建唯一索引示例
CREATE TABLE test_2 (
id INT NOT NULL,
num INT NOT NULL,
test_name VARCHAR (50) NOT NULL,
UNIQUE INDEX UniqIdx (id) #这里是创建唯一索引的命令行
);
创建表语句运行结果
# 2.查看创建的表的表结构
SHOW CREATE TABLE test_2;
命令语句查询结果
# 3.使用Navicat查看创建的索引
Navicat查看索引
创建单列索引
# 1.创建单列索引
CREATE TABLE test_3 (
id INT NOT NULL,
num INT NOT NULL,
test_name VARCHAR (50) NOT NULL,
INDEX SingleIdx (id) # 这里是创建索引的命令行
);
创建表语句运行结果
# 2.查看创建的表的表结构
SHOW CREATE TABLE test_3;
命令行查询结果
# 3.使用Navicat查看创建的索引
Navicat查看索引
其他创建表时创建索引的关键命令行
# 1.组合索引
INDEX MultiIdx (列名1, 列名2,...)
# 2.全文索引(注意仅适用于MyISAM存储引擎)
FULLTEXT INDEX 索引名(列名)
# 3.空间索引(注意仅适用于MyISAM存储引擎)
SPATIAL key 索引名(列名)
此处就不举例子说明了,大家可以自己尝试一下创建索引的命令。