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,表示会先通过条件过滤索引,再通过过滤后的索引查询符合索引条件的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304049.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

物理学家史蒂夫·霍金逝世,享年76岁(附图文回顾他的一生)

3月14日消息,据英国天空新闻等多家媒体报道,史蒂芬威廉霍金(Stephen William Hawking)去世,享年76岁(1942年1月8日-2018年3月14日)。这一消息已经得到霍金家人确认。霍金的三个孩子露…

mysql数据库熟悉表空间数据文件_Oracle表空间和数据文件

Oracle创建表空间 1.创建普通表空间create tablespace oracle_tablespacedatafileOracle创建表空间1.创建普通表空间create tablespace oracle_tablespacedatafile /home/oracle/oradata/orcl/oracle_tablespace.dbfsize 100mautoextend on next 10M maxsize 200Mextent manage…

CSRobot gen:mysql,pg-c#类型映射

下面的数据库类型和c#类型的映射关系,只是我个人的想法,应该不同的业务场景对应可能不一样,比如json,xml,line,polygon结构化的数据,如果在C#中有对应的实体类,可以很友好的转换&…

HTTP header中的 Cache-control

网页的缓存是由HTTP消息头中的“Cache-control”来控制的,常见的取值有private、no-cache、max-age、must-revalidate等,默认为private。其作用根据不同的重新浏览方式分为以下几种情况:(1) 打开新窗口如果指定cache-c…

2018年最值得关注的15大技术趋势,区块链将得到更广泛的应用

通常情况下,技术趋势是很难准确预测的,因为预测未来本身就极其困难。但是我们还是可以从过往的一些显著数据指标来推测新的一年里科技行业的发展趋势。2018,有哪些值得关注的技术趋势?01 区块链将得到更广泛的应用

mtu值修改

ping -f -l 1472 192.168.0.1转载于:https://blog.51cto.com/xiaohe027/382282

Visual Studio项目引用出现感叹号怎么办?

原因可能有多种:第一种问题:解决方式1:今天换了台电脑,就把笔记本上的项目拷贝到了台式机上, 但是我没有拷贝解决方案整个文件夹,因为其中项目太多了,我就把其中一个项目的文件夹直接拷贝到电脑…

java打包拆包_[Java] Java 打包成jar包 和 解压jar包

解压jar包jar xf xxx.jar打包成jar包方法一:通过jar命令jar命令的用法:下面是jar命令的帮助说明:用法:jar {ctxui}[vfm0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ...选项包括:-c 创建新的归档文…

离职总结:大公司与小公司的个人体验

离职在即,在准备下一个工作环境的这段时间,忽然有一阵感慨,工作近五年,在这段时间中,体验了两种不同的工作环境:一个规模很大,各种开发体系完备的大公司,另一个(也是目前…

NDK/JNI01--NDK下载配置

1、NDK下载我的开发环境是Ubuntu9.04 , 所以下载的NDK为android-ndk-r4-linux-x86.zip 2、NDK解压及配置2-1、解压zip文件unzip android-ndk-r4-linux-x86.zip 2-2、配置NDKROOTvim /etc/profile适当位置添加:export NDKROOT/usr/local/android-sdk-linux_86/androi…

java导入导出excel_Java导入导出Excel工具 easyexcel

Java导入导出Excel工具 easyexcel做Java开发的同学,尤其是做管理后台的同学绝大多数都会接触到报表系统,这时候就少不了Excel的导入和导出了。Java解析生成Excel比较有名的有Apache POI ,但是POI存在缺陷就是所有的数据的解析都是在内存中进…

浅谈.Net Core后端单元测试

1. 前言单元测试一直都是"好处大家都知道很多,但是因为种种原因没有实施起来"的一个老大难问题。具体是否应该落地单元测试,以及落地的程度, 每个项目都有自己的情况。本篇为个人认为"如何更好地写单元测试", 即更加偏向实践向中夹杂一些理论的…

图论的各种基本算法

本篇主要涉及到图论的基本算法,不包含有关最大流的内容。图论的大部分算法都是由性质或推论得出来的,想朴素想出来确实不容易。二分图(Is-Bipartite)一个图的所有顶点可以划分成两个子集,使所有的边的入度和出度顶点分别在这两个子集中。这个…

PowerTip of the Day from powershell.com上周汇总(六)

限制String类型参数的长度 Limiting String Input Length http://powershell.com/cs/blogs/tips/archive/2010/08/23/limiting-string-input-length.aspx function Get-FileName {param([ValidateLength(1,8)][String]$FileName)"Your filename {0} is {1} chars long&quo…

java实现权限_Java实现常用权限控制算法

一种常用的权限控制算法的实现,参考LINUX/UNIX权限编码这里笔者介绍一种很常用,也比较专业的权限控制思路。要换成其他的语言主,自己转一下就可以了。这里用java语言描述,其实都差不多的。为了方便起见,我们这里定义a^b为&#xf…

社区 正式发布了跨平台的 CoreWCF 0.1.0 GA

CoreWCF 项目在2021.2.19 正式发布了0.1.0 GA版本:https://github.com/CoreWCF/CoreWCF/releases/tag/v0.1.0 ,这个版本号虽然是0.1,但是它是可以投入生产的版本,而且是跨平台的,支持LInux部署WCF,当前仅支持http 和 n…

Prim 算法及其高效实现

转自:ivy-endhttp://www.ivy-end.com/archives/943背景最小生成树(Minimum Spanning Trees),简称MST。是图论中一个非常重要的概念。解决这个问题有两种算法,今天暂且先来讨论一下Prim Algorithm。不做特别说明&#x…

Silverlight实例教程 - Validation数据验证开篇

说起来Validation验证功能,相信大家都不陌生,在应用中,当需要用户交互输入时,开发人员都会加入一些验证代码,这样可以有效的避免应用异常出现,也可以使应用的错误提示信息清晰明了的显示在客户端&#xff0…

c语言 java 性能 测试_这个蓝桥杯系统的题,用c语言去评测是满分,改为Java说运行错误是0分,但是我查看输入输出,至少第...

这个蓝桥杯系统的题,用c语言去评测是满分,改为Java说运行错误是0分,但是我查看输入输出,至少第一个是对的啊提交序号1269960作者彭云成提交时间02-0507:49:27评测结果运行错误得分...这个蓝桥杯系统的题,用c语言去评测…

一日一技:微信扫码用户帐号绑定

概述最近在整一个微信扫码用户帐号绑定功能。为了满足用户帐号绑定场景的需要,通过生成用户自己的二维码,用户扫描后,公众号可以接收到事件推送。如下1、用户登录扫码2、绑定成功实现思路扫码绑定账户,其实就是扫描带有用户信息的…