40. MySQL 索引详细解读

AI 概述
1.索引概念2. 索引优点3. 小结 索引是数据库中用来提高性能的常用工具。本节主要介绍 MySQL 索引的概念,及其优点。 1.索引概念 索引在 MySQL 中也叫“键(Key)”,是存储引擎用于快速查找记录的一种数据结构,这也是索引的基本功能。 MySQL 索引的工作原理,类似一本书的,如果要在一本书中找到特...
目录
文章目录隐藏
  1. 1.索引概念
  2. 2. 索引优点
  3. 3. 小结

索引是数据库中用来提高性能的常用工具。本节主要介绍 MySQL 索引的概念,及其优点。

1.索引概念

索引在 MySQL 中也叫“键(Key)”,是存储引擎用于快速查找记录的一种数据结构,这也是索引的基本功能。

MySQL 索引的工作原理,类似一本书的目录,如果要在一本书中找到特定的知识点,先通过目录找到对应的页码。在 MySQL 中,存储引擎用类似的方法使用索引,先在索引找到对应值,再根据索引记录找到对应的数据行。简单总结,索引就是为了提高数据查询的效率,跟一本书的目录一样。

以下查询假设字段 c2 上建有索引,则存储引擎将通过索引找到 c2 等于 测试 01 的行。也就是说,存储引擎先在索引按值进行查找,再返回所有包含该值的数据行。

mysql> select * from t1 where c2='测试 01'\G
*************************** 1. row ***************************
c1: 1
c2: 测试 01
1 row in set (0.00 sec)

从执行计划的角度,也可以看出索引 idx_c2 被使用:

mysql> create table t1(
    ->     c1 int not null auto_increment,
    ->     c2 varchar(10) default null,
    ->     primary key(c1)
    -> ) engine = innodb;
Query OK, 0 rows affected (0.05 sec)

mysql> insert into t1() values(1,'测试 01');
Query OK, 1 row affected (0.00 sec)

mysql> create index idx_c2 on t1(c2);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> explain select * from t1 where c2='测试 01'\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: t1
   partitions: NULL
         type: ref
possible_keys: idx_c2
          key: idx_c2
      key_len: 33
          ref: const
         rows: 1
     filtered: 100.00
        Extra: Using index
1 row in set, 1 warning (0.00 sec)

常见的索引类型主要有 B-Tree 索引、哈希索引、空间数据索引(R-Tree)、全文索引,在后续小节将详细介绍。

  • InnoDB 和 MyISAM 存储引擎可以创建 B-Tree 索引,单列或多列都可以创建索引;
  • Memory 存储引擎可以创建哈希索引,同时也支持 B-Tree 索引;
  • 从 MySQL5.7 开始,InnoDB 和 MyISAM 存储引擎都可以支持空间类型索引;
  • InnoDB 和 MyISAM 存储可以支持全文索引(FULLTEXT),该索引可以用于全文搜索,仅限于 CHAR、VARCHAR、TEXT 列。

2. 索引优点

索引最大的作用是快速查找数据,除此之外,索引还有其他的附加作用。

B-Tree 是最常见的索引,按照顺序存储数据,它可以用来做 order by 和 group by 操作。因为 B-Tree 是有序的,将相关的值都存储在一起。因为索引存储了实际的列值,某些查询仅通过索引就可以完成查询,如覆盖查询。

总的来说,索引三个优点如下:

  • 索引可以大大减少 MySQL 需要扫描的数据量;
  • 索引可以帮助 MySQL 避免排序和临时表;
  • 索引可以将随机 IO 变为顺序 IO。

但是,索引是最好的解决方案吗?任何事物都是有两面性的,索引同样如此。索引并不总是最好的优化工具

  • 对于非常小的表,大多数情况,全表扫描会更高效;
  • 对于中大型表,索引就非常有效;
  • 对于特大型表,建索引和用索引的代价是日益增长,这时候可能需要和其他技术结合起来,如分区表。

总的来说,只有当使用索引利大于弊时,索引才是最好的优化工具。

3. 小结

本节主要学习了索引的基本概念和优点。以一句话来总结:索引就是为了提高数据查询的效率,跟一本书的目录一样。同时我们也要认识到,索引很好,但并不总是最好的解决方案,索引也会带来一些负面效果。

以上关于40. MySQL 索引详细解读的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

0

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 40. MySQL 索引详细解读

发表回复