目录
设置了合适的索引之后,数据库利用各种快速定位技术,能够大大加快查询的速度,这是创建索引的最主要的原因
当表很大或查询涉及多个表的时候,使用索引可以成千上万的提高查询速度
可以降低数据库的i/o成本,并且索引还可以降低数据库的排序成本
通过创建唯一(键)性索引,可以保证数据表中每一行数据的唯一性
可以加快表和表之间的连接
在使用分组和排序的时候,可大大减少分组和排序的时间。
以下的操作都基于此模板来进行操作
create database moban;
use moban
create table ky21(id int(10),name varchar(10),cardid varchar(18),phone varchar(11),address varchar(50),remark text);insert into ky21 values(1,'zhangsan','123','111111','nanjin','this is vip');
insert into ky21 values(2,'lisi','1234','222222','nanjin','this is novip');
insert into ky21 values(3,'wangwu','12345','333333','beijing','this is svip');
insert into ky21 values(4,'zhaoliu','123456','444444','sahnghai','this is ssvip');
insert into ky21 values(5,'qianqi','1234567','555555','suzhou','this is novip');

最基本的索引类型,没有唯一性之类的限制;
格式: create index 索引名 on 表名 (列名[(length)]);
(列名(length)): length是可选项。 如果忽略length 的值,则使用整个列的值作为索引。如果指定使用列前的length



alter table 表名 add index 索引名




与普通索引类似,区别是,唯一索引的每个值都是唯一
唯一索引允许有空值,如果是用组合索引创建,则列值 的组合必须唯一,添加唯一键将自动创建唯一索引。
create unique index 索引名 on 表名;
create unique index name_index on member(id);


alter table 表名 add unique 索引名 (列名);


create table jiesisi(id int(4),name varchar(20),unique zz_index(id));
#创建新表test,直接创建唯一键id;show create table jisisi;
#查看索引

是一种特殊的唯一索引,必须指定为"primary key",一个表只有一个主键,不允许有空值,添加主键将自动创建主键索引
- mysql> create table zs11(id int primary key,name varchar(50));
-
- mysql> create table zs11(id int primary key,name varchar(50));
-
-
-
- mysql> create table zs11(id int primary key,name varchar(50));
- mysql> create table zs11(id int primary key,name varchar(50));

mysql> alter table zs13 add primary key(name);

可以是单列上创建的索引,也可是是在多列上的索引
格式
create table 表名(列名1 数据类型 ,列名2 数据类型,列名3 数据类型,index index_索引名字 (列名1,列名2,列名3));
mysql> create table ap13 (id int not null,name varchar(50),cardid varchar(50),index index_ap13 (id,name));
#创建一个表,定义字段和组合索引
show create table ap13;
查看表的内容



适合在进行模糊查询的时候使用,可用于在一篇文章中检索文本信息。
全文索引可以在char,varchar或者text类型的列上创建。每个表只允许有一个全文索引。
- mysql> create fulltext index index_remark on ky21(remark);
-
-
- mysql> show create table ky21;
-

- mysql> alter table ky21 add fulltext name_index(name);
-
-
-
- show create table ky21;


- mysql> create table lulu11(id int(4),name varchar(40),hoppy varchar(40),fulltext index id_index(hoppy));
-
-
-
-
- show create table lulu11;

- mysql> select * from ky21 where match(remark) against('this is vip');
-
-
- mysql> select * from ky21 where remark='this is svip';
-

show index from 表名;
show index from 表名\G; 竖向显示表索引信息
show keys from 表名;
show keys from 表名\G;


各字段含义如下:
| table | 含义 |
| Non_unique | 如果索引不能包括重复词,则为 0;如果可以,则为 1。 |
| Key_name | 索引的名称。 |
| Seq_in_index | 索引中的列序号,从 1 开始。 |
| Column_name | 列名称。 |
| Collation | 列以什么方式存储在索引中。在 MySQL 中,有值‘A’(升序)或 NULL(无分类)。 |
| Cardinality | 索引中唯一值数目的估计值 |
| Sub_part | 如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为 NULL。 |
| Packed | 指示关键字如何被压缩。如果没有被压缩,则为 NULL。 |
| Null | 如果列含有 NULL,则含有 YES。如果没有,则该列含有 NO。 |
| Index_type | 用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)。 |
| Comment | 备注。 |
mysql> drop index phone_index on ky21;

mysql> alter table ky21 drop index index_remark;

索引分为: