MySQL索引——如何提高查询速度

索引是什么?

如果你去过图书馆,应该会知道图书馆的检索系统。图书馆为图书准备了检索目录,包括书名、书号、对应的位置信息,包括在哪个区、哪个书架、哪一层。我们可以通过书名或书号,快速获知书的位置,拿到需要的书

MySQL 中的索引,就相当于图书馆的检索目录,它是帮助 MySQL 系统快速检索数据的一种存储结构。我们可以在索引中按照查询条件,检索索引字段的值,然后快速定位数据记录的位置,这样就不需要遍历整个数据表了。而且,数据表中的字段越多,表中数据记录越多,速度提升越是明显

举个例子:全家某个门店的销售流水表有 400 万条数据,现在我要查看一下商品编号是 100 的商品在 2021-11-26 这一天的销售情况,查询代码如下

SELECT quantity, price, datetime FROM 流水表
WHERE date > '2021-11-26' AND date < '2021-11-27' AND itemnumber = 100;
+----------+--------+---------------------+
| quantity | price | date |
+----------+--------+---------------------+
| 1.000 | 220.00 | 2020-11-26 19:45:36 |
| 1.000 | 220.00 | 2020-11-26 08:56:37 |
+----------+--------+---------------------+
2 rows in set (8.08 sec)
复制代码

可以看到结果总共有 2 条记录,可是却花了 8 秒钟,非常慢。同时,这里我没有做表的关联,这只是单表的查询,而且只是一个门店几个月的数据而已。而总部是把所有门店的数据都汇总到一起,查询速度更慢,这样的查询效率,我们肯定是不能接受的

这个时候,我们就可以给数据表添加索引

单字段索引

MySQL 支持单字段索引和组合索引,而单字段索引比较常用,我们先来学习下创建单字段索引的方法。如何创建单字字段索引

创建单字段索引

  • 通过create语句直接给已经存在的表创建索引
  • 在创建表的同时创建索引
  • 通过修改表来创建索引

直接给数据表创建索引的语法:

create INDEX 索引名 ON TABLE 表名(字段)
复制代码

创建表的同时创建索引的语法:

create table 表名
(
    字段 数据类型,
    ......
    {INDEX | KEY} 索引名(字段)
)
复制代码

修改表的同时创建索引的语法:

alter table 表名 ADD {INDEX | KEY} 索引名(字段)
复制代码

注意:给表设定主键约束或者唯一性约束的时候,MySQL 会自动创建主键索引或唯一性索引

单字段索引的作用原理

要知道索引是怎么起作用的,我们需要借助 MySQL 中的 EXPLAIN 这个关键字

EXPLAIN 关键字能够查看 SQL 语句的执行细节,包括表的加载顺序,表是如何连接的,以及索引使用情况等

首先我们有这样一张表和数据

itemnumber	barcode	goodsname	price
1	0001	书	0.47
2	0002	笔	0.44
3	0002	胶水	0.19
复制代码

其中itemnumber是自增主键,barcode

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值