-- MySQL 索引
-- 索引包括:普通索引、唯一性索引、全文索引、单列索引、多列索引、空间索引等
-- 创建索引
-- 1)建表时创建索引
-- CREATE TABLE 表名(
-- 属性名 数据类型[约束条件];
-- 属性名 数据类型[约束条件];CREATE TABLE 表名(
-- 属性名 数据类型[约束条件];
-- 属性名 数据类型[约束条件];
-- ...
-- 属性名 数据类型
-- [UNIQUE | FULLTEXT | SPATIAL] INDEX/KEY
-- [别名](属性名1[(长度)][ASC|DESC])
-- );
-- ...
-- 属性名 数据类型
-- [UNIQUE | FULLTEXT | SPATIAL] INDEX/KEY
-- [别名](属性名1[(长度)][ASC|DESC])
-- );
# UNIQUE:可选项,表明索引为唯一性索引
# FULLTEXT:可选项,表明索引为全文搜索
# SPATIAL:可选项,表明索引为空间索引
# INDEX和KEY参数用于指定字段索引,用户在选择时,只需要选择其中的一种即可。
# 另外别名为可选项,其作用是给创建的索引取新名称,参数如下:
# 属性名1:指索引对应的字段名称,该字段必须被预先定义。
# 长度:可选项,指索引的长度,必须是字符串类型才可以使用
# ASC/DESC:可选项,ASC表示升序排列,DESC参数表示降序排列。
create table staff(
sid int,
sname varchar(20) not null,
age int,
sex char(2),
email varchar(50),
phone char(11),
department varchar(10),
index(sid), #普通索引
unique index xingming(sname asc), #唯一索引,可以约束字段的唯一性
fulltext key email_info(email),
#全文索引:必须作用在在CHAR VARCHAR TEXT类型的字段上,只有MyISAM 类型的数据库支持FULLTEXT全文索引,InnoDB或其他类型的数据表不支持全文索引。
index phone_num(phone(3)), #单列索引
index info(sex,department),#多列索引,第一个字段名必须使用,索引才会起作用
spatial index name(age) #空间索引,需要设置SPATIAL参数,只有MyISAM类型表支持该类型索引。而且,索引字段必须有非空约束
) engine = MYISAM;
-- 2)已建表中创建索引
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX indexname ON tablename(字段名[(length)][ASC | DESC]);
# indexname:索引名称,该参数作用是给用户创建的索引赋予新的名称
# tablename:表名
#字段名:指定索引对应的字段名称。该字段必须已经预存在用户想要操作的数据表中,如果该数据表中不存在用户指定的字段,系统会提示异常
# length为可选参数,可以指定索引长度
# ASC/DESC指定数据表的排序顺序
create index name on students(sname); #普通索引
create unique index id on students(sid); #唯一索引
create fulltext index age on students(age); #全文索引:只能用于ingine = MyISAM
create index phone on students(phone(3)); #单列索引
create index maininfo on students(sname,age,phone); #多列索引
create spatial hobby on studnets(sname); #空间索引:只能用于ingine = MyISAM,字段必须有非空约束
-- 3)修改表时添加索引
ALTER TABLE tablename ADD [UNIQUE | FULLTEXT | SPATIAL] INDEX indexname(字段名[(length)] [ASC | DESC]);
alter table teachers add index id(tid); #普通索引
alter table teachers add unique index name(tname); #唯一索引
alter table teachers add fulltext index age(age) engine = MYISAM; #全文索引:只能用于ingine = MyISAM
alter table teachers add index age(age); #单列索引
alter table teachers add index maininfo(tname,age,gender); #多列索引
alter table teachers add spatial index sub(tsubject); #空间索引:只能用于ingine = MyISAM
-- 删除索引
drop index phone on students;
drop index maininfo on teachers;