原表格如下图:

mysql建大表索引时会影响到这张表的使用吗 建表时建立索引_升序


(1)为字段sname建立索引

格式:

CREATE INDEX [索引名] on [表格名] (字段名);

例:

mysql建大表索引时会影响到这张表的使用吗 建表时建立索引_sql_02


索引已创立,名称为index

(2)查看索引

格式:

show index from [表格名] from [数据库名]

其中 from [数据库名]可省略

例:

mysql建大表索引时会影响到这张表的使用吗 建表时建立索引_sql_03


解释:

1.Non_unique 表示该索引是否是唯一索引。若不是唯一索引,则该列的值为 1;若是唯一索引,则该列的值为 0。

2.Key_name 表示索引的名称(myindex)。

3.Seq_in_index 表示该列在索引中的位置,如果索引是单列的,则该列的值为1;如果索引是组合索引,则该列的值为每列在索引定义中的顺序。

4.Column_name 表示定义索引的列字段(sname)。

5.Collation 表示列以何种顺序存储在索引中。在 MySQL 中,升序显示值“A”(升序),若显示为 NULL,则表示无分类。

6.Cardinality 索引中唯一值数目的估计值。

7.Sub_part 表示列中被编入索引的字符的数量。若列只是部分被编入索引,则该列的值为被编入索引的字符的数目;若该列的值为NULL,则说明整列被编入索引。

8.Packed 指示关键字如何被压缩。 NULL说明没有被压缩。

9.Null 用于显示索引列中是否包含 NULL。若列含有 NULL,该列的值为 YES。若没有,则该列的值为 NO。

10.Index_type 显示索引使用的类型和方法。

11.Comment 显示评注。表中显示有两行,查询表的内容(如下图)知:该表格中将字段sno、sname设置为主键。由于主键为唯一索引,所以不能再为主键字段建立索引。(关于主键与唯一索引之间的关系,以后会再详细整理。)

mysql建大表索引时会影响到这张表的使用吗 建表时建立索引_升序_04


(3)索引的重命名

格式:

ALTER table [表名] RENAME INDEX [原索引名] TO [新索引名];

例,将(1)中建立的索引重命名为myindex2:

mysql建大表索引时会影响到这张表的使用吗 建表时建立索引_sql_05


另外,该方法只对Mysql5.7及以上版本适用,5.7以下版本为索引重命名的方法是:删除旧索引,建立新索引。

(4)删除索引

格式:

DROP INDEX [要删除的索引名] on student;

mysql建大表索引时会影响到这张表的使用吗 建表时建立索引_升序_06

(5)按某一字段的升序或降序建立唯一索引
格式:

CREATE UNIQUE INDEX [索引名] ON [表名]([字段名] ASC|DESC);

ASC表升序,DESC表降序。如果省略,默认升序。

例1:为student 表按姓名升序建立唯一索引(取名为StuSname)

mysql建大表索引时会影响到这张表的使用吗 建表时建立索引_sql_07


例二:为Student_course 表按学号升序和课程号降序建立唯一索引(取名为SCSnoTcid)

mysql建大表索引时会影响到这张表的使用吗 建表时建立索引_升序_08