对于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的索引下推理解和实践相关推荐

  1. mysql复合索引优点_mysql 联合索引有什么好处? 联合索引的意义

    mysql 里创建'联合索引'的意义 问题? 因为什么需求,要创建'联合索引'?最实际好处在于什么?如果是为了更快查询到数据,有单列索引不是Ok?为什么有'联合索引'的存在? 简单的说有两个主要原因: ...

  2. mysql 组合索引作用是什么_mysql 联合索引的意义

    mysql 里创建'联合索引'的意义 问题? 因为什么需求,要创建'联合索引'?最实际好处在于什么?如果是为了更快查询到数据,有单列索引不是Ok?为什么有'联合索引'的存在? 一 简单的说有两个主要原 ...

  3. mysql索引空间太大_MySQL优化索引

    1.  MySQL如何使用索引 索引用于快速查找具有特定列值的行.如果没有索引,MySQL必须从第一行开始,然后遍历整个表以找到相关的行.表越大,花费越多.如果表中有相关列的索引,MySQL可以快速确 ...

  4. mysql 加索引不起作用_mysql加索引及索引失效的情况

    前言:B+TREE索引的本质是多路绝对平衡查找树,磁盘指针,相当于书的目录,索引不是越多越好. 一:如何加索引 1.PRIMARY  KEY(主键索引) mysql>ALTER  TABLE   ...

  5. mysql创建索引的关键字为_MySQL创建索引(CREATE INDEX)

    索引的建立对于 MySQL 数据库的高效运行是很重要的,索引可以大大提升 MySQL 的检索速度. 基本语法 MySQL 提供了三种创建索引的方法: 1) 使用 CREATE INDEX 语句 可以使 ...

  6. mysql复合索引的应用场景_mysql复合索引(联合索引)的使用场景

    什么是联合索引? 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支 ...

  7. 简述一下索引的匹配原则_Mysql联合索引最左匹配原则

    [toc] 为什么使用联合索引 以联合索引(a,b,c)为例 建立这样的索引相当于建立了索引a.ab.abc三个索引.一个索引顶三个索引当然是好事,毕竟每多一个索引,都会增加写操作的开销和磁盘空间的开 ...

  8. mysql索引底层实现原理_mysql的索引底层之实现原理

    MySQL索引背后的数据结构及算法原理 一.定义 索引定义:索引(Index)是帮助MySQL高效获取数据的数据结构. 本质:索引是数据结构. 二.B-Tree m阶B-Tree满足以下条件: 1.每 ...

  9. mysql索引能重复吗_mysql重复索引与冗余索引实例分析

    本文实例讲述了mysql重复索引与冗余索引.分享给大家供大家参考,具体如下: 重复索引:表示一个列或者顺序相同的几个列上建立的多个索引. 冗余索引:两个索引所覆盖的列重叠 冗余索引在一些特殊的场景下使 ...

最新文章

  1. 谈一谈使用Python入门量化投资
  2. asl不成功怎么算_那些减肥成功还不反弹的人是怎么做到的?
  3. 微服务实现事务一致性实例
  4. spring配置日志
  5. mysql 浮点类型和定点_mysql 中的浮点和定点类型
  6. 大数据“跨界”文化金融
  7. 状态压缩DP-棋盘模型总结
  8. PHP unicode与普通字符串的相互转化
  9. mdx词典包_不会用医学词典?停姐手把手教你啊(内附海量医学词典词库资源下载)...
  10. 四款亲试好用的PDF编辑器推荐,看看哪款最适合你
  11. 微信商家收款码和个人收款码有什么区别?
  12. openStreetMap数据分析举例-使用Qt统计城市科技指数排名
  13. android工程师专业技能,android开发工程师简历中的专业技能怎么写
  14. 战战兢兢尝试tensorflow2.0
  15. Android设置网络图片为手机背景图片的方法
  16. 51 nod 1682 中位数计数
  17. autojs代码大全(实战演练)
  18. 参观营收上亿的私域流量企业
  19. 关于以太网IO模块如何选型
  20. R语言与RStudio的下载与安装方法

热门文章

  1. .NetCore Cap 结合 RabbitMQ 实现消息订阅
  2. .NET Core微服务之基于IdentityServer建立授权与验证服务
  3. Visual Studio 2017 15.6版本预览,增加新功能
  4. 如何在Linux上使用VIM进行.Net Core开发
  5. EventBus In eShop -- 解析微软微服务架构eShopOnContainers(四)
  6. 异步广度优先搜索算法
  7. 写给新手的WebAPI实践
  8. Docker 部署dotnetcore
  9. Visual Studio Code 1.0正式发布
  10. bat批处理笔记(二)