mysql之索引
索引是数据的目录,能快速定位数据的位置,索引提高了查询速度,但降低了增,删,改的速度,一般在查询频率较高并且重复度较低的列上加。
索引类型
index--普通索引
给已存在的表的列创建索引,create index 索引名称 on 表名称 (列名称(10));
在建表时声明索引,create table 表名 (id int,name char(20),email char(20),index name(name(10))); name(10)中的10是索引长度,是从左到右的10个字符
修改索引,alter table 表名 add index name (name(10));
unique index--唯一索引,与普通索引类似,不同的是索引列的值必须是唯一的,但允许有空值
给已存在的表的列创建索引,create unique index 索引名称 on 表名称 (列名称(10));
在建表时声明索引,create table 表名 (id int,name char(20),email char(20),unique index name(name(10)));
修改索引,alter table 表名 add unique index name (name(10));
primary key--主键索引,是一种特殊的唯一索引,不允许有空值,主键索引无需命名,一张表只能有一个主键索引
在建表时声明索引,create table 表名 (id int,name char(20),email char(20),primary key (name(10)));
修改索引,alter table 表名 add primary key (name(10));
fulltext index--全文索引,innodb存储引擎不支持全文索引,中文环境下,全文索引无效,要分词+索引,一般用第三方解决方案,如sphinx
给已存在的表的列创建索引,create fulltext index 索引名称 on 表名称 (列名称(10));
在建表时声明索引,create table 表名 (id int,name char(20),email char(20),unique fulltext index name(name(10)));
修改索引,alter table 表名 add fulltext index name (name(10));
多列索引,把2列或多列看出一个整体,然后建索引,使用多列索引,比如where等条件,列名必须是从多列索引最左至右连续的列名左条件才可以,这和单一索引前缀类似。
调用多列索引,select * from 表名 where name='zhangsan' and city='beijing';
冗余索引,在一个列上同时存在多个索引,比如,xm(xing,ming),ming(ming)。
查看索引,show index from 表名,show create table 表名也可以看到。
删除索引,drop index 索引名 on 表名,或者alter table 表名 drop index 索引名。