跳到主要内容

三十二、MySQL 索引

MySQL 索引可以大大提高 MySQL 的检索速度

打个比方,如果合理的设计且使用索引的 MySQL 是一辆高速公路的话,那么没有设计和使用索引的 MySQL 就是一个人力山村泥泞路

索引分单列索引和组合索引

1、 单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引;
2、 组合索引,即一个索引包含多个列;

创建索引时,需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)

实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录

过多的使用索引将会造成滥用

因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行 INSERTUPDATEDELETE 因为更新表时,MySQL 不仅要保存数据,还要保存一下索引文件

建立索引会占用磁盘空间的索引文件

显示索引信息

SHOW INDEX FROM tablename; 命令可以列出某个表中的相关的索引信息

比如下面的 SQL 命名用于列出 tbl_language 表的索引信息

SHOW INDEX FROM tbl_language;

运行结果如下

MariaDB [souyunku]> SHOW INDEX FROM tbl_language;
+--------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+--------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| tbl_language | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | |
+--------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
1 row in set (0.00 sec)