开发者

MySQL索引管理的使用解读

目录
  • 常见的索引
  • 索引的建立与查看
    • 1. 创建数据表的同时建立索引
    • 2. 创建数据表后添加索引
    • 3. 使用ALTER TABLE语句建立索引
    • 4. 查看数据表上的引用
  • 查看索引的使用情况
    • 索引的删除
      • 1. 使用ALTER TABLE 语句删除索引
      • 2. 使用DROP INDEX 语句删除索引
    • 总结

      常见的索引

      (1)PRIMARY:主键索引,索引列值唯一且不能为空;一张表只能有一个主键索引。

      (2)INDEX:普通索引,索引列没有任何限制。

      (3)UNIQUE:唯一索引,索引列的值必须是唯一的,但允许有空值。

      (4)FULLTEXT:全文索引,只有MyISAM存储引擎支持。

      (5)SPATIAL:空间索引,对空间数据类型的字段建立的索引。

      索引的建立与查看

      1. 创建数据表的同时建立索引

      在 CREATE TABLE 语句中添加一下的语句来实现在创建数据表的同时建立索引。

      create table 表名 (
      字段1 数据类型 字段属性,
      字段2 数据类型 字段属性,
           ...
      索引类型 index 索引名 (字段名)
      );

      例如在studpythonent表中,在字段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 表的索引信息:

      MySQL索引管理的使用解读

      参考说明:

      • Non_unqiue:索引字段值是否可以重复,0表示不可以,1表示可以。
      • key_name:索引的名字,如果索引是主键索引,则它的名字为PRIMARY。
      • Seq_in_index:建立索引的字段序号值,联合索引第一个字段为1,第二个字段为2。
      • Column_name:建立索引的字段。
      • Collation:索引字段是否有序,A表示有序,NULL表示没kcuiolyl有排序。
      • Cardinality:计算连接时使用索引的可能性,值越大,可能性越高。
      • Sub_part:前缀索引的长度,如4,无前缀则为NULL。
      • Index_type:索引类型,可选值有BTREE、FULLTEXT、HASH、RTREE。

      查看索引的使用情况

      使用EXPLAIN关键字查看SQL语句中执行索引的使用情况。

      例如查看student表中的索引使用信息

      explain select * from student where sname like '王%';

      MySQL索引管理的使用解读

      查看student表中的全文索引使用信息

      explain select * from student where match (remarks) against ('三好学生');

      参考说明:

      MySQL索引管理的使用解读

      • id: 查询标识符,默认从1开始,若使用了联合查询,则该值依次递增,联合查询结果对应的该值为NULL。
      • select_type: 操作类型,如DELETE、UPDATE等,担当执行SELECT语句时,它的值有多种,例如,SIMPLE表示不需联合查询或简单的子查询。
      • table: 查询表的名字。
      • partitions: 匹配的分区。
      • type: 取值可为system,const、eq_ref、ref、fulltext等。
      • key: 查询使用到的索引。
      • ref: 表js示哪些字段或常量与索引进行比较,例如,const表示常量与索引进行了比较。
      • rows编程客栈: 预计需要检索的记录数。
      • filtered: 按条件过滤的百分比。
      • Extral: 附加信息,例如,USing index 表示使用了索引覆盖。

      索引的删除

      1. 使用ALTER TABLE 语句删除索引

      ALTER TABLE 表名 DROP INDEX 索引名;

      例如删除student表中的index_sname索引。

      alter table student drop index index_sname python;

      2. 使用DROP INDEX 语句删除索引

      DROP INDEX 索引名 ON 表名;

      例如删除score表中的index_sno_cno索引。

      drop index index_sno_cno on score;

      总结

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

      0

      上一篇:

      下一篇:

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新数据库

      数据库排行榜