mysql 扫描所有字段_select扫描mysql innodb表时,select只输出主键列,会不会扫描全表?...

题主假定按照主键检索。我们假定是等值查询。范围查询和表遍历情形可以在文末经推导得出。

primary key

A set of columns—and by implication, the index based on this set of columns—that can uniquely identify every row in a table. As such, it must be a unique index that does not contain any NULL values.

InnoDB requires that every table has such an index (also called the clustered index or cluster index), and organizes the table storage based on the column values of the primary key.

以上说明存储引擎是按照主键聚簇存储的。

With the exception of spatial indexes,InnoDBindexes are B-tree data structures. Spatial indexes use R-trees, which are specialized data structures for indexing multi-dimensional data. Index records are stored in the leaf pages of their B-tree or R-tree data structure. The default size of an index page is 16KB.

以上说明数据是按照B+树组织的。主键按照逻辑索引被存储在叶子结点上。所以我们只能继续去那里找数据。

An InnoDB page has seven parts:

Fil Header

Page Header

Infimum + Supremum Records

User Records

Free Space

Page Directory

Fil Trailer

以上说明物理页中没有现成的主键数据簇。

Similarly,InnoDBdoes not want to insert new rows according to the B-tree's key order (that would involve expensive shifting of large amounts of data), so it inserts new rows right after the end of the existing rows (at the top of the Free Space part) or wherever there's space left by a deleted row.

以上说明用户数据物理上在页内形成一个堆。

But by definition the records of a B-tree must be accessible in order by key value, so there is a record pointer in each record (the "next" field in the Extra Bytes) which points to the next record in key order. In other words, the records are a one-way linked list. SoInnoDBcan access rows in key order when searching.

以上说明这个物理堆形成一个逻辑有序的链表。假设这个查询可以命中。(细节) 存储引擎通过在页目录中二分查找到一个大致定位。并且最终找到了这条记录。接下来,我们要看看如何在物理记录中找到主键列数据。

The chart below shows the three parts of a physical record.

NameSizeField Start Offsets(F*1) or (F*2) bytesExtra Bytes6 bytesField Contentsdepends on content

Legend: The letter 'F' stands for 'Number Of Fields'.

The meaning of the parts is as follows:

The FIELD START OFFSETS is a list of numbers containing the information "where a field starts".

The EXTRA BYTES is a fixed-size header.

The FIELD CONTENTS contains the actual data.

以上说明一个物理记录分为三部分。乍一看我们也许需要继续查找主键在什么位置。

Clustered indexes

The clustered key (PRIMARY KEY) has one of the more complex record structures:

Cluster Key Fields: The cluster key fields, concatenated together (literally). InnoDB just concatenates the raw bytes of its internal storage formats per column type together into a single byte stream.

以上说明主键在物理记录中聚簇,可以直接提取。至此题主应该了解等值查询究竟都经历了些什么。至于范围查询和表遍历,找到第一个记录之后按照链表结构依次提交给游标即可。

所以主键的遍历也仅仅是不用在非键列中再查询一次而已。当然在索引和聚簇数据结构的帮助下,主键的查询投影开销一定是比较小的。

References:

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

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

相关文章

cstring判断包含字符串_作为java程序员要知道的大厂常见的算法面试题:字符串的包含...

1.2 字符串的包含题目描述给定一长字符串a和一短字符串b。请问,如何最快地判断出短字符串b中的所有字符是否都在长字符串a中?请编写函数bool StringContain(string &a, string &b)实现此功能。为简单起见,假设输入的字符串只包含大写…

数字双胞胎技术和物联网如何帮助企业取得成功

来源:物联之家网(iothome.com)到2023年,全球数字双胞胎市场预计将达到150亿美元,2017年至2023年的复合年增长率(CAGR)为37%。通用电气、IBM和微软等主要公司正在使用数字双胞胎技术来…

武汉凭什么被列为国家超大城市?

2014年11月,国务院发布国发2014第51号文件《关于调整城市规模划分标准的通知》,新标准将城市划分为五类七档,其中规定:城区常住人口1000万人以上的城市为超大城市。 根据该标准,此前北京、上海、天津、重庆、广州、深圳…

sql中排序序号_SQL 和 SPL 的有序运算对比

【摘要】 有序运算是指按照一定的次序对有序集合的成员进行计算。SQL 和 SPL 是大家比较熟悉的程序语言,本文将探讨对于有序运算问题,这两种语言的解决方案和基本原理。如何简便快捷的处理有序运算,这里为你全程解析,并提供 SQL 和…

前方高能!AI 大牛 LeCun 设想下一个新前沿:摈弃深度学习的所有概率技巧,改而掌握不断转变的能量值...

来源:云头条据深度学习界的领军人物Yann LeCun声称,AI的下一个发展阶段可能是摈弃深度学习的所有概率技巧,改而掌握不断转变的能量值。据说工程师(以及一些科学家,但以工程师为主)早在坐到板凳上搞设计之前…

python源码分析工具_python 域名分析工具实现代码

代码如下: import sys, urllib import datetime,time def getDate(): strdaydatetime.datetime.now().__str__() strdaystrday.split()[0] return strday #url "http://www.kingnic.com/list/2009-06-16.txt" def getUrl(dateStrNone): baseUrl "ht…

ubuntu安装完mysql无法登录_Ubuntu安装mysql8后无法登陆怎么解决

设置mysql为无密码启动修改MySQL的登录设置:gedit /etc/my.cnf在[mysqld]的段中加上一句:skip-grant-tables保存并退出重新启动mysqld,清空密码重启mysql: sudo systemctl restart mysql进入mysql:mysql -uroot进入mys…

2019年中国智能制造发展现状及趋势分析报告

来源:前瞻产业研究院未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能,互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测;开展互联网…

unix网络编程

先来考虑信号处理int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);该函数用来修改收到一个信号时的处理方式。参数act用来指定新处理方式,oldact用来保存先前的处理方式。处理方式保存在一个结构中 struct sigaction {void …

python3异常_python3 异常处理

1、异常基础 在编程过程中为了增加友好性,在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大黄页!!! try: pass #代码主体 except Exception as e: pass 例…

mysql blackhole引擎_MySQL BlackHole引擎

概念像MyISAM、InnoDB,BlackHole是另一种MySQL引擎,从字面意思来看,其表现就像一个黑洞,只进不出,进来就消失。换句话说,任何往其中写的数据都将丢失,有点像Linux的/dev/null比如一个表test的引…

元学习—Meta Learning的兴起

来源:专知【导读】元学习描述了训练深度神经网络相关的更高级别的元素。在深度学习文献中,“元学习”一词经常表示神经网络架构的自动化设计,经常引用“ AutoML”,“少量学习”或“神经架构搜索”。OpenAI的魔方机器人手的成功源于…

codevs 1021 玛丽卡

题目链接:http://codevs.cn/problem/1021/ 题解: 哦!最小值的最大值!!二分!!!……咳咳…… SPFA算法,邻接表(邻接矩阵应该不会炸,懒得试了……&am…

python3 rid1.7.4.2 控制台中文乱码_TL;DR - 有关 Python 2 和 Sublime Text 中文 Unicode 编码问题的分析与理解...

TL;DR 问题背景: 相信很多用 Sublime Text 来写 Python 2 的同学都遇到过以下这个问题(例如这位同学 /t/100435 和这位同学/t/163012 ): 在 Sublime Text 里用 Cmd (Ctrl) B 运行代码 print u中文,想要打印出 unicode…

条码管理系统mysql_银行通用固定资产条码管理系统

银行通用固定资产条码管理系统固定资产条码管理系统是企业管理中的一个重要组成部分,固定资产具有价值高,使用周期长、管理难度大等特点。针对这些问题,本系统运用计算机及条形码等技术,从而实现固定资产的信息化管理。本系统有如…

Linux用find查找指定文件的操作

一 . 查找当前用户下某个文件 例如 要查找的文件名为 sn_sav20140710 可已使用下面的语句查询 [sinopeclocalhost ~]$ find . -name sn_sav20140710 二.查找指定目录下的文件 这里只需指定目录即可 例如: 例如 要查找的文件名为 sn_sav20140710 可已使用下面的语句查…

服务器行业深度解析:服务器未来需求知多少

来源:国盛证券一、 全球公有云加速渗透叠加企业上云大趋势来临1. 全球云领军收入增速维持高位,Q2 CAPEX 出现恢复信号全球云计算进入甜蜜点,IaaS 市场主导增长。1)2017 年 6 月,Morgan Stanley 认为全球云计算行业进入…

海上瓶子下有东西吗_洗衣液瓶子我从来不扔,瓶身这样剪几刀,解决了很多家庭的大烦恼...

洗衣液瓶子相信家家户户都会有,每次用完的空洗衣液瓶你都扔掉了吗?那就太可惜了,卖废品也卖不了几毛钱,我们可以将废弃的洗衣液瓶简单剪几刀,就能够变废为宝了,能够解决很多家庭生活中的大烦恼。今天就教大…

光耦继电器

光耦继电器(光电继电器) AQW282SX 282SZ 280SX 280SZ 284SX 284SZ 212S 212SX 21 2SZ 文章目录 光耦继电器(光电继电器)前言一、光耦继电器是什么二、光耦继电器的类型三、光电耦合器的应用总结前言 光耦继电器在工业控制、通讯、医疗设备、家电及汽车电子等领域得到广泛应…

Java学习网站

黑马: http://bbs.itheima.com/forum.php 考试网站: http://www.nowcoder.com/ 牛客网 比较专业的学习技术网站: http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/ 开源中国 : http://www.oschina.net/ 学习网站 : http://iteye.com/ ImportNew : http://www.im…