mysql之索引入门
在mysql中,所有列类型数据都能被索引,使用索引是改进mysql查询操作性能的最好办法,是数据库优化的重要手段之一。
索引的特点
一个表最多可有16个索引,最大索引长度是256字节,尽管这可以在编译MySQL时被改变。
对于 CHAR 和 VARCHAR 列,你可以索引列的前缀。这更快并且比索引整个列需要较少的磁盘空间。对于 BLOB 和 TEXT 列,你必须索引列的前缀,你不能索引列的全部。
MySQL 能在多个列上创建索引,一个索引可以由最多15个列组成。(在CHAR和VARCHAR列上,你也可以使用列的前缀作为一个索引的部分)
ISAM 表和 MyISAM 表之间的差别:
索引特点|ISAM 表|MyISAM 表
索引特点 | ISAM 表 | MyISAM |
---|---|---|
NULL 值 | 不允许 | 允许 |
BLOB 和 TEXT 值 | 不能索引 | 只能索引列的前缀 |
每个表中的索引数 | 16 | 32 |
每个索引中的列数 | 16 | 16 |
最大索引行尺寸 | 256字节 | 500字节 |
索引有如下几种情况:
- INDEX 索引:通常意义的索引,某些情况下 KEY 是它的一个同义词,索引的列可以包含重复的值。
- UNIQUE 索引:唯一索引,保证了列不包含重复的值,对于多列唯一索引,它保证值得组合不重复。
- PRIMARY KEY 索引:和UNIQUE索引类似,可以理解为特殊的 UNIQUE 索引。一个表中只能包含一个PRIMARY KEY,PRIMARY KEY 索引不允许列为空值。
创建和删除索引
1. 使用 Alter Table 和 Create Index 语句
1 | ALTER TABLE tb_name ADD INDEX index_name(column_list); |
tb_name 是要添加索引的表名,index_name 是创建的索引名,column_list是列名集合,多个列名使用逗号分隔。
同样,也可以使用 ALTER TABLE 语句加 DROP 操作符删除索引:
1 | ALTER TABLE tb_name DROP INDEX index_name; |
上面第一条语句可以删除各类型索引,第二条语句只在删除 PRIMARY KEY 作用。如果没有明确地创建作为 PRIMARY KEY 的索引,但该表具有一个或多个UNIQUE 索引,则 MySQL将删除 UNIQUE 索引的第一个。
索引依赖于列而存在,如果从表中删除了列,则索引会受到影响。如果所删除的列作为索引的组成部分,则该列会从索引中删除;如果索引的所有列被删除,那么该索引也会被隐式删除。
2. 使用CREATE/DROP INDEX 创建索引
CREATE INDEX 是在 MySQL3.23版引入的。标准语法格式如下:
1 | CREATE UNIQUE INDEX index_name ON tb_name(column_list); |
注意:不能用 CREATE INDEX 创建PRIMARY KEY 索引。
DROP INDEX 是在 3.22 中引入的,标准语法格式如下:
1 | DROP INDEX index_name ON tb_name; |
在创建表时指定索引
要想创建新表时同时创建索引,指定索引的语句语法如下:
1
2
3
4
5
6
7
8CREATE table tb_name(
...
INDEX index_name(column_list),
key index_name(column_list),
UNIQUE index_name(column_list),
PRIMARY KEY index_name(column_list),
...
);与 ALTER TABLE 一样,索引名对于 INDEX 和 UNIQUE 都是可选的,如果未给出,MySQL将为其选一个。
当索引的列为单列时,也可以在列定义后指定索引,如下:
1
2
3
4
5CREATE table tb_name(
column_name type_name PRIMARY KEY,
column_name type_name UNIQUE
...
);上面 PRIMARY KEY 的指定也可等价于:PRIMARY KEY(column_name)。
3. 对串列的前缀进行索引
在 CREATE TABLE 语句中可以某个串列的前缀进行索引(列值左边的n个字符)。
对某个列的前缀进行索引,上面 colum_list 的指定中,column_name改为column_name(n)。如下面的语句:
1 | CREATE TABLE tb_name( |
检查表的索引
1 | SHOW INDEX FROM tb_name; |
THE END! 本文转自百度文库——MySQL完全手册。
原文作者: Sherman
原文链接: https://blogs.yumiaoxia.com/2019/03/06/mysql之索引入门/
版权声明: 转载请注明出处(必须保留原文作者署名原文链接)