索引
一、索引简介
--索引在MySQL中也叫做"键",是存储引擎用于快速找到记录的一种数据结构。
--索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。
--索引优化应该是对查询性能优化最有效的手段了。
--索引能够轻易将查询性能提高好几个数量级。
--索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则需要从几百页中逐页去查。
--索引特点:创建与维护索引会消耗很多时间与磁盘空间,但查询速度大大提高!
二、索引语法
-- 1.创建表时创建索引:可以直接创建索引,这种方法最简单、方便
--基本语法
CREATE TABLE 表名 (
字段名1 数据类型 [完整性约束条件…],
字段名2 数据类型 [完整性约束条件…],
[UNIQUE | FULLTEXT | SPATIAL ] INDEX | KEY
[索引名] (字段名[(长度)] [ASC |DESC])
);
注释:
(1)UNIQUE:可选参数,表示唯一索引;
(2)FULLTEXT:可选参数,表示全文索引;
(3)SPATIAL:可选参数,表示空间检索;
(4)INDEX 和 KEY:用来表示字段的索引,二者选一;
(5)索引名:可选参数,表示创建的索引的名称;
(6)字段名:指定索引对应字段的名称;
(7)长度:用于表示索引的长度;
(8)ASC 和 DESC:可选参数,ASC表示升序,DESC表示降序。
(1)UNIQUE:可选参数,表示唯一索引;
(2)FULLTEXT:可选参数,表示全文索引;
(3)SPATIAL:可选参数,表示空间检索;
(4)INDEX 和 KEY:用来表示字段的索引,二者选一;
(5)索引名:可选参数,表示创建的索引的名称;
(6)字段名:指定索引对应字段的名称;
(7)长度:用于表示索引的长度;
(8)ASC 和 DESC:可选参数,ASC表示升序,DESC表示降序。
--
①创建普通索引
--是由INDEX或KEY定义的索引,它是MySQL中的基本索引类型,可以创建在任何数据类型上,其值是否唯一和非空由字段本身的约束条件所决定。
--示例:
mysql>CREATE TABLE employee1(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20),
resume VARCHAR(20),
INDEX index_emp_name(name) --INDEX可以替换成KEY
);
-- ②唯一性索引
--是由UNIQUE定义的索引,该索引所在字段的值必须是唯一的。
--示例:
CREATE TABLE employee2(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20),
bank_num CHAR(18) UNIQUE,
resume VARCHAR(30),
UNIQUE INDEX index_emp_name(name)
);
-- ③全文索引
--是由FULLTEXT定义的索引,它只能创建CHAR、VARCHAR或TEXT类型的字段上,而且只有MyISAM存储引擎支持全文索引。InnoDB存储引擎还不支持全文索引。
--示例:
CREATE TABLE employee3(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20),
resume VARCHAR(30),
FULLTEXT INDEX index_resume(resume)
)ENGINE=MyISAM;
-- ④单列索引
指的是在表中单个字段上创建索引,它可以是普通索引,唯一性索引或者全文索引,只要保证该索引只对应表中一个字段即可。
-- ⑤多列索引
指的是在表中多个字段上创建索引,只有在查询条件中使用了这些字段中的第一个字段时该索引才会被使用。
例如,在employ4表的id、name和resume字段上创建一个多列索引,那么只有查询条件中使用了id字段时,该索引才会被使用。
--示例:
CREATE TABLE employee4(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20),
resume VARCHAR(30),
INDEX index_emp(id,name,resume)
);
--
2.使用CREATE INDEX语句在已经存在的表上创建索引
CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名
ON 表名(字段名[(长度)] [ASC |DESC]);
示例:CREATE INDEX index_emp_name on emp1(name);
--
3.使用ALTER TABLE语句在已经存在的表上创建索引
ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX
索引名 (字段名[(长度)] [ASC |DESC]) ;
示例:ALTER TABLE emp2 ADD UNIQUE INDEX index_bank_num(band_num);
三、删除索引
--1.使用ALTER TABLE删除索引
--语法:
ALTER TABLE 表名 DROP {INDEX|KEY} 索引名;
--示例:
ALTER TABLE employ1 DROP {INDEX|KEY} index_emp_name;
--2.使用DROP INDEX 删除索引
--语法:
DROP INDEX 索引名 ON 表名;
--示例:
DROP INDEX index_emp_name ON employ1;
DROP INDEX bank_num ON employ2;
--语法:
DROP INDEX 索引名 ON 表名;
--示例:
DROP INDEX index_emp_name ON employ1;
DROP INDEX bank_num ON employ2;