常见的索引
(1)primary:主键索引,索引列值唯一且不能为空;一张表只能有一个主键索引。
(2)index:普通索引,索引列没有任何限制。
(3)unique:唯一索引,索引列的值必须是唯一的,但允许有空值。
(4)fulltext:全文索引,只有myisam存储引擎支持。
(5)spatial:空间索引,对空间数据类型的字段建立的索引。
索引的建立与查看
1. 创建数据表的同时建立索引
在 create table 语句中添加一下的语句来实现在创建数据表的同时建立索引。
create table 表名 ( 字段1 数据类型 字段属性, 字段2 数据类型 字段属性, ... 索引类型 index 索引名 (字段名) );
例如在student表中,在字段sname上创建普通索引index_sname;
在字段dept字段和sex字段上创建联合索引index_dept_sex;
在remarks字段上创建全文索引ft_remarks。
create table student( sno char(6) primary key comment '学号', sname varchar(20) not null comment '姓名', dept varchar(20) comment '专业', sex char(1) comment '性别', birthday date comment '出生日期', totalcredit decimal(4,1) default 0 comment '总学分', remarks varchar(100) comment '备注', -- 在sname字段上创建普通索引 index index_sname (sname) , -- 在dept字段和sex字段上创建联合索引 index index_dept_sex (dept,sex), -- 在remarks字段上创建全文索引 fulltext index ft_remarks (remarks) ) engine = myisam;
2. 创建数据表后添加索引
可以使用 create index 语句在一个已有的数据表上添加索引
create index 索引名称 on 数据表名 (列名)
例如在course表cname字段上创建普通索引index_cname。
create index index_cname on course(cname);
在course表cname字段上创建前缀索引索引pf_cname。
create index index_cname on course(cname(4));
3. 使用alter table语句建立索引
通过alter table 语句直接为已有的数据表建立索引
alter table 数据表名 add 索引类型 index 索引名称(类名)。
例如在score表的sno字段和cno字段上创建联合唯一索引。
alter table score add unique index index_sno_cno (sno,cno);
4. 查看数据表上的引用
通过show index语句来查看索引.
show index from 数据表名
例如显示course表的索引信息。
show index from course;
course 表的索引信息:
参考说明:
non_unqiue
:索引字段值是否可以重复,0表示不可以,1表示可以。key_name
:索引的名字,如果索引是主键索引,则它的名字为primary。seq_in_index
:建立索引的字段序号值,联合索引第一个字段为1,第二个字段为2。column_name
:建立索引的字段。collation
:索引字段是否有序,a表示有序,null表示没有排序。cardinality
:计算连接时使用索引的可能性,值越大,可能性越高。sub_part
:前缀索引的长度,如4,无前缀则为null。index_type
:索引类型,可选值有btree、fulltext、hash、rtree。
查看索引的使用情况
使用explain关键字查看sql语句中执行索引的使用情况。
例如查看student表中的索引使用信息
explain select * from student where sname like '王%';
查看student表中的全文索引使用信息
explain select * from student where match (remarks) against ('三好学生');
参考说明:
id
: 查询标识符,默认从1开始,若使用了联合查询,则该值依次递增,联合查询结果对应的该值为null。select_type
: 操作类型,如delete、update等,担当执行select语句时,它的值有多种,例如,simple表示不需联合查询或简单的子查询。table
: 查询表的名字。partitions
: 匹配的分区。type
: 取值可为system,const、eq_ref、ref、fulltext等。key
: 查询使用到的索引。ref
: 表示哪些字段或常量与索引进行比较,例如,const表示常量与索引进行了比较。rows
: 预计需要检索的记录数。filtered
: 按条件过滤的百分比。extral
: 附加信息,例如,using index 表示使用了索引覆盖。
索引的删除
1. 使用alter table 语句删除索引
alter table 表名 drop index 索引名;
例如删除student表中的index_sname索引。
alter table student drop index index_sname ;
2. 使用drop index 语句删除索引
drop index 索引名 on 表名;
例如删除score表中的index_sno_cno索引。
drop index index_sno_cno on score;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论