Mysql 索引

索引 is what ?
  索引是借助存储引擎实现的一种高效获取数据的数据结构。在查询数据时能有效避免全表扫面,从而实现高效获取数据。
  由于索引是排好序的数据结构,这就能有效的维护数据的唯一性,并且实现高效获取数据,虽然查询数据的效率有了很大的提高,但是在对数据表进行 增、删、改时为了维护数据表的索引也耗费了一定的系统资源。

 索引的创建

在创建表的时候创建索引

create table 表名(
        列名1 数据类新 [约束条件],
        列名2 数据类型 [约束条件],
        ......
        [UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY [别名] (列名n[(长度)]) [ASC | DESC];
        )engine=ENFINE_NAME;

说明:
UNIQUE : 可选参数,表示唯一索引;
FULLTEXT: 可选参数,表示全文索引;
SPATIAL: 可选参数,表示空间索引;
INDEX 和 KEY: 用来表示字段的索引,二选一;
别名: 可选参数,表示创建的索引名;
列名n: 指定索引对应的字段名称;
长度: 可选参数,表示索引的长度;
ASC 和 DESC : 可选参数,选择升序或降序。

普通索引

例如在 id 上创建

create table table_name(
id int not null,
name varchar(15),
INDEX (id)
);

唯一索引

create table table_name(
id int not null,
name varchar(15),
UNIQUE KEY unique_id(id ASC)
);

其实主键也是一种唯一索引——不能有空值。

全文索引

InnoDB引擎不支持,MyISAM支持性能较好,一般在 char 、varchar或text的列上创建;

create table 表名(
    列名1,
    列名2,
    ......
    FULLTEXT INDEX fullindex(列名n)
)engine=MyISAM;

多列索引

若是创建单例索引,括号中列出一个列名便好;若是创建多列索引,则括号中列出相关列的列名即可。

空间索引

Mysql使用关键字:SPATIAL 创建空间索引,空间索引只能建立在空间数据类型上,并且相应的字段必须有非空约束。而支持空间索引存储引擎只有 MyISAM。
Mysql空间数据类型:geometry、point、linestring、polygon。

在已建的数据表中创建索引

CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX  index_name ON table_name(列名[(长度)] [ASC | DESC]);

对于普通索引可直接

CREATE INDEX index_name ON table_name(列名);

对于唯一索引,全文索引,空间索引 ,单列索引或多列索引使用相应的关键字创建即可。

修改表的结构添加索引

ALTER TABLE table_name ADD  [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name (列名[(长度)]  [ASC | DESC]);

例如添加一个多列索引:

ALTER TABLE table_name  ADD  INDEX index_name (列名1,列名2,...);

查看索引

可以从表的结构来查看索引:

SHOW CREATE TABLE table_name;
DESC table_name;
SHOW COLUMNS FROM table_name;

第一句sql语句会将 索引整合到表的创建语句中,然后将表的整个创建语句显示出来;

其中:UNIQUE KEY 'info' ('title')  便是;

后两句效果相同,以列表的方式给出:

其中,对于 Field title在 Key 列有值 UNI,这表明是唯一索引。

SHOW [INDEX | KEYS] FROM table_name;

这句sql 语句则会将表中的所有索引的详细的列出。

看得出 列  title 对应的索引名为 info , Non_unique 的值为 0 说明是唯一索引。

删除索引

DROP INDEX index_name ON table_name;

ALTER TABLE table_name DROP INDEX  index_name;
原文地址:https://www.cnblogs.com/lightandtruth/p/8447194.html