目录
一、索引的分类
二、创建索引
1.隐式创建索引
2.显式创建索引
创建表的同时创建索引
在已创建的表上添加索引
三、删除索引
1. 普通索引
普通索引,即在创建是不附加任何的限制条件,单纯是用于提高查询效率,可以创建在任何的数据类型中。另外的,其值是否唯一和非空还要看字段本身的完整性约束条件决定。
2. 唯一性索引
唯一性索引,使用UNIQUE参数设置索引为唯一性索引,即创建改索引时,其值必须唯一,但允许为空值。一张表中可以有多个唯一性索引。
加约束时创建索引,在声明有主键约束,唯一性约束,外键约束的字段上,会自动创建对应的约束。
语法如下:
CREATE TABLE table_name [col_name data_type]
[UNIQUE | FULLTEXT | SPATIAL] [INDEX | KEY]
[index_name] (col_name [length]) [ASC | DESC]
① 创建普通索引
CREATE TABLE book(
book_id INT ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR,
#声明索引
INDEX idx_bname(book_name)
);
通过命令查看索引
方式一:
#选中数据库
USE dbtest;
#查看索引
SHOW CREATE DAtABASE book;
方式二:
SHOW INDEX FROM book;
② 创建唯一性索引
声明有唯一索引的字段在添加数据时要保证唯一性,但可添加null值
#创建唯一性索引
CREATE TABLE book1(
book_id INT ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR,
#声明索引
UNIQUE INDEX uk_idx_cmt(book_name)
);
③ 创建主键索引
通过定义主键约束的方式创建主键索引
#创建主键索引
CREATE TABLE book2(
book_id INT PRIMARY KEY,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR
);
④创建单列索引
#创建单例索引
CREATE TABLE book1(
book_id INT ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR,
#声明索引
INDEX single_idx_name(book_name)
);
⑤创建组合索引
#创建组合索引
CREATE TABLE book1(
book_id INT ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR,
#声明索引
INDEX mul_bid_bname_if(book_id, book_name, info)
);
⑥创建全文索引
#创建全文索引
CREATE TABLE book1(
book_id INT ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR,
#声明索引
FULLTEXT INDEX ft_idx_info(info)
);
举例二、创建了一个给book_name和book_id字段添加全文索引的表。
#创建全文索引
CREATE TABLE book1(
book_id INT ,
book_name VARCHAR(100),
AUTHORS VARCHAR(100),
info VARCHAR(100) ,
COMMENT VARCHAR(100),
year_publication YEAR,
#声明索引
FULLTEXT INDEX (book_id, book_name)
);
⑦创建空间索引
CREATE TABLE test5(
geo GEOMETRY NOT NULL,
SPATIAL INDEX spa_idx_geo(geo)
);
①ALTER TABLE ... TO ...
ALTER TABLE table_name ADD [ UNIQUE | FULLTEXT | SPATIAL ] [ INDEX | KEY ][index_name] (col_name[length],...) [ ASC | DESC ]
②CREATE INDEX ... ON ...
CREATE [ UNIQUE | FULLTEXT | SPATIAL ] INDEX index_nameON table_name (col_name[length],...) [ ASC | DESC ]
ALTER TABLE table_name DROP INDEX index_name;
DROP INDEX index_name ON table_name;
提示:删除表中的列时,如果要删除的列为索引的组成部分,则该列也会从索引中删除。如果组成 索引的所有列都被删除,则整个索引将被删除。