本文是关于MySQL中索引的基础知识。主要讲了索引的意义与原理、创建与删除的操作。并未涉及到索引的数据结构、高性能策略等。
一、概述
1.索引的意义:用于提高数据库检索数据的效率,提高数据库性能。
数据库在检索数据时,如果没有索引,则只能从第一条记录开始逐条查找,效率很低,添加索引可以明显提升效率。
2.索引的原理:索引存储了数据库的表中的关键字的值。关键字是索引用来搜索数据的依据,可以是一列,也可以是几列,还可以是一列的开头部分(前缀索引)。
需要查找某条记录时,先在索引中查找该记录关键字的值,然后根据匹配的索引记录找到对应的数据行。
3.其他要点:
(1)一个表可以创建多个索引;但由于索引文件存储在硬盘上,每次更新数据都会自动维护索引,从而对硬盘进行读写,所以不宜创
建过多的索引。
(2)查询索引时,可以查询整个关键字,也可以查询关键字中的部分列,还可以只查询某一列值的开头部分(前缀查找)。
(3)创建主键约束、唯一性约束时,会自动创建主索引、唯一性索引,索引名和约束名相同,删除了索引也就是删除了约束;
创建外键约束时,会自动创建一个普通索引,索引名和约束名相同。
二、索引的创建
1.关键字的选取原则:
优先选择这些列作为关键字:
- 离散度高的列。也就是说,选为关键字的列的值,重复越少越好。
- 占用存储空间少、储存空间固定的列。比如,INT比CHAR更适合做关键字,CHAR比TEXT更适合做关键字。
- 经常被WHERE、GROUP BY、ORDER BY所操作的列。因为创建索引的意义之一就是提高检索效率,而检索是通过SELECT语句实现的。因此,应将SELECT语句中常用的操作列优先选为关键字。、
避免选取从不出现在WHERE子句中的列,和更新频繁的列。
2.创建索引
(1)创建表时创建索引:
CREATE TABLE 表名(
列1 数据类型 约束条件,
列2 数据类型 约束条件,
……
其他约束条件,
索引类型 INDEX 索引名(列名(长度))
)引擎、字符集、校对方式设定;
其中:
- 索引类型:可省略,也可选择UNIQUE和FULLTEXT(全文索引:查询大字符串,只能建立在CHAR,VARCHAR,TEXT列上)
- 长度:可省略,是用于前缀索引中,设定该列字符长度的
(2)在已有表上创建索引:
CREATE 索引类型 INDEX 索引名 ON 表名 (列名(长度));
或
ALTER TABLE 表名 ADD 索引类型 INDEX 索引名(列名(长度));
3.查看索引
SHOW INDEX FROM 表名;
SHOW KEYS FROM 表名;
4.删除索引
DROP INDEX 索引名 ON 表名;