MySQL索引语句

MySQL语句请跳转:MySQL语句

创建索引

CREATE INDEX语句

 该语句用于在已存在的表添加索引

语法

CREATE INDEX <索引名> ON <表名> (<列名> [<长度>] [ ASC | DESC ])

说明

  • 索引名:指定索引名。一个表可以创建多个索引,但每个索引名在表中唯一
  • 表名:指定在哪个表中创建索引
  • 列名:指定要创建索引的列名。通常可以考虑将查询语句中在 JOIN 子句和 WHERE 子句里经常出现的列作为索引列,可以是一列也可以是多列,一列的称之为单列索引,多列成为组合索引
  • 长度:可选项。指定使用列前的 length 个字符来创建索引。使用列的一部分创建索引有利于减小索引文件的大小,节省索引列所占的空间。在某些情况下,只能对列的前缀进行索引。索引列的长度有一个最大上限 255 个字节(MyISAM 和 InnoDB 表的最大上限为 1000 个字节),如果索引列的长度超过了这个上限,就只能用列的前缀进行索引。另外,BLOB 或 TEXT 类型的列也必须使用前缀索引
  • ASC | DESC:可选项。ASC指定索引按照升序来排列,DNSC指定索引按照降序来排列,默认为ASC

例子
 给学生表的name字段设置索引,索引名为name

create index `name` on student(`name`);

CREATE TABLE语句

 用于在创建表(CREATE TABLE)时创建,在CREATE TABLE 语句下添加

语法
1、表示在创建新表的同时创建该表的索引

KEY | INDEX [<索引名>] [<索引类型>] (<列名>,)

2、表示在创建新表的同时创建该表的唯一性索引

UNIQUE [ INDEX | KEY] [<索引名>] [<索引类型>] (<列名>,)

例子


CREATE TABLE `student`(
	`student_id` INT PRIMARY KEY AUTO_INCREMENT COMMENT '学生id',
	`name` VARCHAR(10) NOT NULL COMMENT '学生姓名',
	`sex` VARCHAR(1) COMMENT '性别',
	`age` INT COMMENT '年龄',
	`phone` VARCHAR(11) COMMENT '手机号',
	`birthday` DATETIME COMMENT '生日',
	`create_time` DATETIME NOT NULL COMMENT '创建时间',
	`update_time` DATETIME COMMENT '修改时间',
	INDEX(`name`) # 在name列上添加索引(索引名默认列名)
)ENGINE=InnoDB CHARACTER SET=utf8;

ALTER TABLE语句

 在使用 ALTER TABLE 语句修改表的同时,可以向已有的表添加索引。具体的做法是在 ALTER TABLE 语句中添加以下语法成分的某一项或几项

语法
1、在修改表的同时为该表添加索引

ADD INDEX [<索引名>] [<索引类型>] (<列名>,)

2、在修改表的同时为该表添加唯一性索引

ADD UNIQUE [ INDEX | KEY] [<索引名>] [<索引类型>] (<列名>,)

例子

ALTER TABLE student ADD INDEX index_class (class);

查看索引

语句

SHOW INDEX FROM <表名> [ FROM <数据库名>]

例子

 查看该表的所有索引

show index from student

查看索引图
查看索引图

说明

  • 表名:查询索引的表名
  • 数据库名:要查询的表在哪个数据库,这个可以使用数据库名.表名替代
  • Table:表名
  • No_unique:用于显示该索引是否是唯一索引。若不是唯一索引,则该列的值显示为 1;若是唯一索引,则该列的值显示为 0
  • Key_name:索引的名称,不指定名称就是列名
  • Seq_in_index:索引中的列序列号,从1开始计数
  • Column_name:列名
  • Collation:显示列以何种顺序存储在索引中。在 MySQL 中,升序显示值“A”,若显示为 NULL,则表示无分类
  • Cardinality:显示索引中唯一值数目的估计值。基数根据被存储为整数的统计数据计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL 使用该索引的机会就越大
  • Sub_part:若列只是被部分编入索引,则为被编入索引的字符的数目。若整列被编入索引,则为 NULL
  • Packed:指示关键字如何被压缩。若没有被压缩,则为 NULL
  • Null:用于显示索引列中是否包含 NULL。若列含有 NULL,则显示为 YES
  • Index_type:显示索引使用的类型和方法(BTREE、FULLTEXT、HASH、RTREE)
  • Comment:显示评注
  • Index_comment:显示评注

删除索引

语法

DROP INDEX <索引名> ON <表名>
或者
ALTER TABLE <表名> DROP INDEX <索引名>

 注意:如果删除的列是索引的组成部分,那么在删除该列时,也会将该列从索引中删除;如果组成索引的所有列都被删除,那么整个索引将被删除。
例子

drop index `name` on student;alter table student drop index `name`;
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值