mysql使用索引下推的好处_mysql的索引下推理解和实践
对于mysql建表稍有点经验的开发人员都会为后续的where查询条件提前考虑创建索引。
这里说的是在使用索引查询时有关索引下推的有关知识点。
综合前人的经验结果:索引下推是数据库检索数据过程中为减少回表次数而做的优化。
判断是否需要回表的是由mysql存储引擎控制,默认从mysql5.6版本开始支持。
下面用docker分别创建基于mysql5.5和mysql5.6的容器,表结构保持一致(docker创建mysql容器不做演示)。
首先看mysql5.5:
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.5.62 |
+-----------+
1 row in set (0.00 sec)
mysql> show create table testhh\G;
*************************** 1. row ***************************
Table: testhh
Create Table: CREATE TABLE `testhh` (
`id` int(10) unsigned NOT NULL,
`age` int(10) unsigned DEFAULT '0',
`name` char(10) NOT NULL DEFAULT '',
`height` int(10) NOT NULL DEFAULT '0',
`name2` char(10) NOT NULL DEFAULT '',
`height2` int(10) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `age_index` (`age`) USING HASH,
KEY `un` (`name`,`height`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
ERROR:
No query specified
mysql> explain select * from testhh where name like 'a%' and height = 100\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: testhh
type: range
possible_keys: un
key: un
key_len: 14
ref: NULL
rows: 1
Extra: Using where
1 row in set (0.00 sec)
ERROR:
No query specified
上面可见explain的extra字段结果时Using where,表示优化器需要通过索引回表查询数据。
再看mysql5.6:
mysql> selectversion();+-----------+
| version() |
+-----------+
| 5.6.50 |
+-----------+
1 row in set (0.00sec)
mysql>show create table ua\G;*************************** 1. row ***************************Table: ua
Create Table: CREATE TABLE `ua` (
`id`int(10) NOT NULL AUTO_INCREMENT,
`name`char(10) NOT NULL DEFAULT '',
`height`int(10) NOT NULL DEFAULT '0',
`name2`char(10) NOT NULL DEFAULT '',
`height2`int(10) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `nh` (`name`,`height`)
) ENGINE=InnoDB DEFAULT CHARSET=latin11 row in set (0.00sec)
ERROR:
No query specified
mysql> explain select * from ua where name like 'a%' and height=10\G;*************************** 1. row ***************************id:1select_type: SIMPLE
table: ua
type: range
possible_keys: nh
key: nh
key_len:14
ref: NULL
rows:1Extra: Using index condition1 row in set (0.00sec)
ERROR:
No query specified
explain的extra字段是Using index condition,表示会先通过条件过滤索引,再通过过滤后的索引查询符合索引条件的数据。
mysql使用索引下推的好处_mysql的索引下推理解和实践相关推荐
- mysql复合索引优点_mysql 联合索引有什么好处? 联合索引的意义
mysql 里创建'联合索引'的意义 问题? 因为什么需求,要创建'联合索引'?最实际好处在于什么?如果是为了更快查询到数据,有单列索引不是Ok?为什么有'联合索引'的存在? 简单的说有两个主要原因: ...
- mysql 组合索引作用是什么_mysql 联合索引的意义
mysql 里创建'联合索引'的意义 问题? 因为什么需求,要创建'联合索引'?最实际好处在于什么?如果是为了更快查询到数据,有单列索引不是Ok?为什么有'联合索引'的存在? 一 简单的说有两个主要原 ...
- mysql索引空间太大_MySQL优化索引
1. MySQL如何使用索引 索引用于快速查找具有特定列值的行.如果没有索引,MySQL必须从第一行开始,然后遍历整个表以找到相关的行.表越大,花费越多.如果表中有相关列的索引,MySQL可以快速确 ...
- mysql 加索引不起作用_mysql加索引及索引失效的情况
前言:B+TREE索引的本质是多路绝对平衡查找树,磁盘指针,相当于书的目录,索引不是越多越好. 一:如何加索引 1.PRIMARY KEY(主键索引) mysql>ALTER TABLE ...
- mysql创建索引的关键字为_MySQL创建索引(CREATE INDEX)
索引的建立对于 MySQL 数据库的高效运行是很重要的,索引可以大大提升 MySQL 的检索速度. 基本语法 MySQL 提供了三种创建索引的方法: 1) 使用 CREATE INDEX 语句 可以使 ...
- mysql复合索引的应用场景_mysql复合索引(联合索引)的使用场景
什么是联合索引? 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支 ...
- 简述一下索引的匹配原则_Mysql联合索引最左匹配原则
[toc] 为什么使用联合索引 以联合索引(a,b,c)为例 建立这样的索引相当于建立了索引a.ab.abc三个索引.一个索引顶三个索引当然是好事,毕竟每多一个索引,都会增加写操作的开销和磁盘空间的开 ...
- mysql索引底层实现原理_mysql的索引底层之实现原理
MySQL索引背后的数据结构及算法原理 一.定义 索引定义:索引(Index)是帮助MySQL高效获取数据的数据结构. 本质:索引是数据结构. 二.B-Tree m阶B-Tree满足以下条件: 1.每 ...
- mysql索引能重复吗_mysql重复索引与冗余索引实例分析
本文实例讲述了mysql重复索引与冗余索引.分享给大家供大家参考,具体如下: 重复索引:表示一个列或者顺序相同的几个列上建立的多个索引. 冗余索引:两个索引所覆盖的列重叠 冗余索引在一些特殊的场景下使 ...
最新文章
- 谈一谈使用Python入门量化投资
- asl不成功怎么算_那些减肥成功还不反弹的人是怎么做到的?
- 微服务实现事务一致性实例
- spring配置日志
- mysql 浮点类型和定点_mysql 中的浮点和定点类型
- 大数据“跨界”文化金融
- 状态压缩DP-棋盘模型总结
- PHP unicode与普通字符串的相互转化
- mdx词典包_不会用医学词典?停姐手把手教你啊(内附海量医学词典词库资源下载)...
- 四款亲试好用的PDF编辑器推荐,看看哪款最适合你
- 微信商家收款码和个人收款码有什么区别?
- openStreetMap数据分析举例-使用Qt统计城市科技指数排名
- android工程师专业技能,android开发工程师简历中的专业技能怎么写
- 战战兢兢尝试tensorflow2.0
- Android设置网络图片为手机背景图片的方法
- 51 nod 1682 中位数计数
- autojs代码大全(实战演练)
- 参观营收上亿的私域流量企业
- 关于以太网IO模块如何选型
- R语言与RStudio的下载与安装方法
热门文章
- .NetCore Cap 结合 RabbitMQ 实现消息订阅
- .NET Core微服务之基于IdentityServer建立授权与验证服务
- Visual Studio 2017 15.6版本预览,增加新功能
- 如何在Linux上使用VIM进行.Net Core开发
- EventBus In eShop -- 解析微软微服务架构eShopOnContainers(四)
- 异步广度优先搜索算法
- 写给新手的WebAPI实践
- Docker 部署dotnetcore
- Visual Studio Code 1.0正式发布
- bat批处理笔记(二)