认识和使用索引
任务五:认识和使用索引
索引
5.1 索引的概念
数据库的索引好比新华字典的音序表,它是对数据库表中一列或多列的值进行排序后的一种结构,其作用就是提高表中数据的查询速度。
注:创建表的时候创建索引
CREATE TABLE 表名
(
字段名 数据类型[完整性约束条件],
字段名 数据类型[完整性约束条件],
......
字段名 数据类型
[UNIQUE|FULLTEXT|SPATIAL] INDEX|KEY
[别名] (字段名1 [(长度)]) [ASC|DESC])
);
注: UNIQUE:可选参数,表示唯一性约束
FULLTEXT:可选参数,表示全文约束
SPATIAL:可选参数,表示空间约束
INDEX和KEY:用来表示字段的索引,二者选一即可
别名:可选参数,表示创建的索引的名称
字段名1:指定索引对应字段的名称
长度:可选参数,用于表示索引的长度
ASC和DESC:可选参数,其中,ASC表示升序排列,DESC表示降序排列
在上述语法格式中,[ ]中都是可选参数
5.2 创建索引
创建索引的方式有三种,具体如下:
5.2.1 创建表的时候创建索引:
(1)普通索引
如:在t1表中id字段上建立索引,SQL语句如下:
CREATE TABLE t1
(
id INT,
name VARCHAR(20),
score FLOAT,
INDEX (id)
);
(2)唯一性索引
如:创建一个表名为t2的表,在表中的id字段上建立索引名为unique_id的唯一性索引,并且按照升序排列,SQL语句如下:
CREATE TABLE t2
(
id INT NOT NULL ,
name VARCHAR(20) NOT NULL ,
score FLOAT ,
UNIQUE INDEX unique_id(id ASC)
);
(3)全文索引
如:创建一个表名为t3的表,在表中的name字段上建立索引名为fulltext_name的全文索引, SQL语句如下:
CREATE TABLE t3
(
id INT NOT NULL ,
name VARCHAR(20) NOT NULL ,
score FLOAT ,
FULLTEXT INDEX fulltext_name(name)
);
(4)单列索引
如:创建一个表名为t4的表,在表中的name字段上建立索引名为single_name的单列索引, SQL语句如下:
CREATE TABLE t4
(
id INT NOT NULL ,
name VARCHAR(20) NOT NULL ,
score FLOAT ,
INDEX single_name(name (20) )
);
(5)多列索引
如:创建一个表名为t5的表,在表中的id和name字段上建立索引名为multi的多列索引, SQL语句如下:
CREATE TABLE t4
(
id INT NOT NULL ,
name VARCHAR(20) NOT NULL ,
score FLOAT ,
INDEX multi(id,name (20) )
);
(6)* 空间索引
如:创建一个表名为t6的表,在空间类型为GEOMETRY的字段上创建空间索引,SQL语句如下:
CREATE TABLE t6
(
id INT,
space GEOMETRY NOT NULL,
SPATIAL INDEX sp(space)
)ENGINE=MyISAM;
注:创建空间索引时,所在字段的值不能为空值,并且表的存储引擎为MyISAM。
5.2.2 使用CREATE INDEX 语句在已经存在的表上创建索引
若想在一个已经存在的表上创建索引,可以使用CREATE INDEX语句,CREATE INDEX语句创建索引的具体语法格式如下所示:
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名ON 表名 (字段名 [(长度)] [ASC|DESC]);
如:在t1表中的id字段上建立一个名称为unique_id的唯一性索引,SQL语句如下所示:
CREATE UNIQUE INDEX unique_id ON ti (id);
5.2.3 使用ALTER TABLE语句在已经存在表上创建索引
在已经存在的表中创建索引,使用ALTER TABLE语句在已经存在表上创建索引的语法格式如下所示:
ALTER TABLE 表名 ADD [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名 (字段名 [(长度)] [ASC|DESC]);
如:在t1表中的id字段上建立一个名称为unique_id的唯一性索引,SQL语句如下:
ALTER TABLE t1 ADD UNIQUE unique_id (id);
注:使用SHOW CREATE TABLE语句查看表的结构, SQL代码如下:
SHOW CREATE TABLE 表名;
注:为了查看索引是否被使用,可以使用EXPLAIN语句进行查看,SQL代码如下:
EXPLAIN SELECT * FROM 表名 [WHERE 字段名=1];
5.3 删除索引
删除索引的方式有两种,具体如下:
1. 使用ALTER TABLE删除索引
使用ALTER TABLE删除索引的基本语法格式如下所示:
ALTER TABLE 表名 DROP INDEX 字段名;
2. 使用DROP INDEX删除索引
使用DROP INDEX删除索引的基本语法格式如下所示
DROP INDEX 索引名 ON 表名;