MySQL索引系列:索引概述

什么是索引?

索引是存储引擎用于快速找到记录的一种数据结构,是一种以特定顺序保存的专用表。不过索引并不包含实体中的所有数据,而是包含那些用于定位表中行的列,以及描述这些行的物理位置的信息。

要理解 MySQL 中索引是如何工作的,最简单的方法就是去看看一本书的 “索引” 部分:如果想在一本书中找到某个特定主题,一般会先看书的目录页,即 “索引”,找到对应的页码,然后就可以找到想看的内容。

所有 MySQL 列类型都可以被索引,根据存储引擎可以定义每个表的最大索引数和最大索引长度,每种存储引擎(如 InnoDB、MyISAM、MEMORY、BDB 等)对每个表至少支持 16 个索引,总索引长度至少为 256 字节。大多数存储引擎有更高的限制。

为什么要使用索引?

通常我们在查找一个序列中的某一个元素时,用到的最简单的方式就是遍历,数据库也是一样,在一张表中查找某一行数据时,如果不考虑索引的状况下,也会采用一个逐行扫描的方式,只不过数据库通常以块或者页为单位,所以它通常将整个块或者页加载进内存,然后逐块轮询查找到结果并返回。

如果数据库中只有少量数据,那么进行全表扫描,速度还是会很快,但是如果在数据量很大的表中,这种方法就不再适用了,在数据量很大的表中,由于逐行扫描代价变大,通常需要避免采用这种逐行扫描的方式进行数据查找,数据库为了使查询变得高效,所以引入了索引这种方式对数据进行查找。

索引的优点

MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车,跑起来速度天差地别。

举个例子:

# 表 article 目前只有一个主键id,status与hits并没有建立索引
select count(*) from article where `status` = 0 and hits > 50;

下面对它进行explain分析:

mysql> explain select count(*) from article where `status` = 0 and hits > 50;
+----+-------------+---------+------------+------+---------------+------+---------+------+----------+----------+-------------+
| id | select_type | table   | partitions | type | possible_keys | key  | key_len | ref  | rows     
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值