[](()1.索引的定义
维基百科对数据库索引的定义:

数据是以文件的形式存放在磁盘上面的,每一行数据都有它的磁盘地址。如果没有索引的话,我们要从500万行数据里面检索一条数据,只能依次遍历这张表的全部数据,直到找到这条数据。
但是我们有了索引之后,只需要在索引里面去检索这条数据就行了,因为它是一种特殊的专门用来快速检索的数据结构
,我们找到数据存放的磁盘地址以后,就可以拿到数据了。
[](()2.索引的类型
在MySQL的所有中支持三种索引类型
| 类型 | 描述 |
| — | :-- |
| Normal | 普通索引 |
| Unique | 唯一索引 |
| Fulltext | 全文索引 |
[](()Normal
也叫非唯一索引,是最普通的索引,没有任何的限制
直接创建索引
CREATE INDEX index_name ON table(column(length))
修改表结构的方式添加索引
ALTER TABLE table_name ADD INDEX index_name ON (column(length))
创建表的时候同时创建索引
CREATE TABLE table
(
id
int(11) NOT NULL AUTO_INCREMENT ,
title
char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
content
text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
time
int(10) NULL DEFAULT NULL ,
PRIMARY KEY (id
),
INDEX index_name (title(length))
)
删除索引
DROP INDEX index_name ON table
[](()Unique
唯一索引要求键值不能重复。另外需要注意的是,主键索引是一种特殊的唯一索引,它还多了一个限制条件,要求键值不能为空。主键索引用primary key创建。
#创建唯一索引
CREATE UNIQUE INDEX indexName ON table(column(length))
#修改表结构
ALTER TABLE table_name ADD UNIQUE indexName ON (column(length))
#创建表的时候直接指定
CREATE TABLE table
(
id
int(11) NOT NULL AUTO_INCREMENT ,
title
char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
content
text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
time
int(10) NULL DEFAULT NULL ,
PRIMARY KEY (id
),
UNIQUE indexName (title(length))