MySQL数据库原理学习(十一)
2.6 索引使用
2.6.1 验证索引效率
在讲解索引的使用原则之前,先通过一个简单的案例,来验证一下索引,看看是否能够通过索引来提升数据查询性能。在演示的时候,我们还是使用之前准备的一张表 tb_sku , 在这张表中准备了1000w的记录。
这张表中id为主键,有主键索引,而其他字段是没有建立索引的。我们先来查询其中的一条记录,看看里面的字段情况,执行如下SQL:
select * from tb_sku where id = 1\G;
可以看到即使有1000w的数据,根据id进行数据查询,性能依然很快,因为主键id是有索引的。那么接下来,我们再来根据 sn 字段进行查询,执行如下SQL:
SELECT * FROM tb_sku WHERE sn = '100000003145001';
我们可以看到根据sn字段进行查询,查询返回了一条数据,结果耗时 20.78sec,就是因为sn没有索引,而造成查询效率很低。
那么我们可以针对于sn字段,建立一个索引,建立了索引之后,我们再次根据sn进行查询,再来看一下查询耗时情况。
创建索引:
create index idx_sku_sn on tb_sku(sn) ;
然后再次执行相同的SQL语句,再次查看SQL的耗时。
SELECT * FROM tb_sku WHERE sn = '100000003145001';
我们明显会看到,sn字段建立了索引之后,查询性能大大提升。建立索引前后,查询耗时都不是一个数量级的。
2.6.2 最左前缀法则
如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。如果跳跃某一列,索引将会部分失效(后面的字段索引失效)。以 tb_user 表为例,我们先来查看一下之前 tb_user 表所创建的索引。
在 tb_user 表中,有一个联合索引,这个联合索引涉及到三个字段,顺序分别为:profession,age,status。
对于最左前缀法则指的是,查询时,最左变的列,也就是profession必须存在,否则索引全部失效。
而且中间不能跳过某一列,否则该列后面的字段索引将失效。接下来,我们来演示几组案例,看一下具体的执行计划:
explain select * from tb_user where profession = '软件工程' and age = 31 and status
= '0';
explain select * from tb_user where profession = '软件工程' and age = 31;
explain select * from tb_user where profession = '软件工程';
以上的这三组测试中,我们发现只要联合索引最左边的字段 profession存在,索引就会生效,只不过索引的长度不同。而且由以上三组测试,我们也可以推测出profession字段索引长度为47、age字段索引长度为2、status字段索引长度为5。
相关文章
- MySQL数据库基础学习(十一)
- MySQL学习之Mysql锁&事务隔离级别详解数据库
- MySQL实现自启动的方法(mysql自启动)
- MySQL Status Ssl_client_connects 数据库状态作用意思及如何正确
- 查看MySQL数据库中所有表名(mysql数据库表名)
- MySQL同步任务:实现数据同步的命令简介(mysql同步命令)
- 如何解决MySQL数据库中的索引丢失问题(mysql索引丢失)
- 全新实现:MySQL数据库打包(mysql 数据库打包)
- MySQL的绑定变量:提高查询性能,减少安全风险(mysql的绑定变量)
- MySQL远程复制数据库简单实现指南(mysql远程复制数据库)
- MySQL事务处理实践探究(mysql的事务处理)
- 大小Mysql最大数据表大小探究(mysql最大表)
- 利用MySQL中的log命令行优化数据库管理(mysql中log命令行)
- C语言MySQL数据库中存取图片的技术(c mysql读取图片)
- MySQL中ignore指令的使用方法和注意事项(mysql中ignore)
- MySQL数据库中的删除操作详解(mysql中deleat)
- cmd进入MySQL开启欢迎之门(cmd进mysql窗口)
- 解析MySQL七种锁,助您数据库管理更顺畅(mysql七种锁)
- 定时清空数据库表MySQL的良心设计(mysql 不定时表清空)
- 免费下载MySQL绿色版,轻松搭建数据库(mysql下载绿色版)