索引 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 tabletable_name(
idint not null,
namevarchar(15),INDEX(id)
);
唯一索引
create tabletable_name(
idint not null,
namevarchar(15),UNIQUE KEY unique_id(id ASC)
);
其实主键也是一种唯一索引——不能有空值。
全文索引
InnoDB引擎不支持,MyISAM支持性能较好,一般在 char 、varchar或text的列上创建;
create table表名(
列名1,
列名2,
......
FULLTEXTINDEXfullindex(列名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;