MySQL内核技术之"查询流程"

史湘云
• 阅读 3170

本节讨论MySQL是如何进行数据查询和读取的。首先看一下调用过程:

JOIN::exec()-->
do_select()-->
sub_select()-->
read_record()实际上是join_read_next()或join_read_first()-->
ha_index_next-->
index_next()实际上是ha_innobase::index_next()-->
general_fetch()-->
row_search_mvcc()

ha_innobase是从handler派生出来的,用来做实际查询的。里面的重要结构有:

/** Save CPU time with prebuilt/cached data structures */
row_prebuilt_t*        m_prebuilt;

/** Thread handle of the user currently using the handler;
this is set in external_lock function */
THD*            m_user_thd;

这里面最重要的是m_prebuilt结构,其中比较重要的几项:

btr_pcur_t*    pcur;        /*!< persistent cursor used in selects
                and updates */
innodb_session_t*
        session;    /*!< InnoDB session handler. */
/** The MySQL table object */
TABLE*        m_mysql_table;

/** The MySQL handler object. */
ha_innobase*    m_mysql_handler;

handler是由table调用的,常用的方式是table->file->**,这里的file实际上就是handler。而table在optimizer中被赋值的: TABLE_LIST *tl= select_lex->leaf_tables;,因为用了select_lex,就表明一个THD所有的操作都是共享table的。

m_prebuilt->pcur->btr_cur.page_cur.offsets

点赞
收藏
评论区
推荐文章
待兔 待兔
4年前
Dart基础&gt;Dart语法(上)
Dart基础系列:Dart简介(https://www.jianshu.com/p/c749f40828a5)Dart语法(上)(https://www.jianshu.com/p/6b5689342e24)<基础Dart语法(下)(https://www.jianshu.com/p/7c3eba46e679)说明:
Stella981 Stella981
3年前
ASMSupport教程4.7 生成关系运算符
<p在java中,关系运算符是很常用的,分别是&gt;,,&lt;,&gt;,&lt;,!这六种,我们按照惯例看看我们需要生成的代码:</p<divid"scid:9D7513F9C04C4721824A2B34F0212519:dfec0f1ca2ec4ebabc9b91c161fbfa47"class"wlWri
Stella981 Stella981
3年前
C#访问MySQL数据库(winform+EF)
以前都是C连接SQLServer,现在MySQL也比较火了,而且是开源跨平台的,这里连接使用一下,主要是体会一下整个流程,这里使用的是winform访问MYSQL,当然使用winfrom,还是wfp,以及其他的技术这里不讨论,个人觉得这个比较上手快。http://jingyan.baidu.com/article/642c9d34aa809a644
Stella981 Stella981
3年前
Explain(MySQL高级知识四)
前言:explain(执行计划),使用explain关键字可以模拟优化器执行sql查询语句,从而知道MySQL是如何处理sql语句。explain主要用于分析查询语句或表结构的性能瓶颈。注:本系列随笔如无特殊说明都MySQL版本都为5.7.22。1.explain的作用通过explainsql语句可以知道如下内容:①表的读取顺序。(
Wesley13 Wesley13
3年前
4,MongoDB 之 $关键字 及 $修改器 $set $inc $push $pull $pop MongoDB
MongoDB中的关键字有很多,$lt$gt$lte$gte等等,这么多我们也不方便记,这里我们说说几个比较常见的一.查询中常见的等于大于小于大于等于小于等于等于:在MongoDB中什么字段等于什么值其实就是":"来搞定比如"name":"路飞学城"!(https://oscimg.oschin
Wesley13 Wesley13
3年前
thinkphp 基本配置
12returnarray(34//定义数据库连接信息5'DB\_TYPE''mysql',//指定数据库是mysql67'DB\_HOST''localhost',89'DB\_NAME''uchome',//数据库名1011'DB\_USER''root
Wesley13 Wesley13
3年前
MongoDB 范围查询
查询价格在2009000  $gt 大于   $lt  小于//查询价格2009000范围的数据db.prodgory.find({"price":{$gt:"200",$lt:"9000"}})查询给定范围数据  $in//给定范围查询db.product1.find({"categor
Stella981 Stella981
3年前
Python 为什么只需一条语句“a,b=b,a”,就能直接交换两个变量?
从接触Python时起,我就觉得Python的元组解包(unpacking)挺有意思,非常简洁好用。最显而易见的例子就是多重赋值,即在一条语句中同时给多个变量赋值:&gt;&gt;&gt;x,y1,2&gt;&gt;&gt;print(x,y)结果:12在此例中,赋值操作符“”号的右
浅谈SQL优化小技巧 | 京东云技术团队
回顾MySQL的执行过程,帮助介绍如何进行sql优化。(1)客户端发送一条查询语句到服务器;(2)服务器先查询缓存,如果命中缓存,则立即返回存储在缓存中的数据;(3)未命中缓存后,MySQL通过关键字将SQL语句进行解析,并生成一颗对应的解析树,MySQL
小万哥 小万哥
1年前
资源描述框架的用途及实际应用解析
RDF(资源描述框架)是一种用于机器理解网络资源的框架,使用XML编写。它通过URI标识资源,用属性描述资源,便于计算机应用程序处理信息。RDF在语义网上促进信息的确切含义和自动处理,使得网络信息可被整合。RDF语句由资源、属性和属性值组成。RDF文档包括&lt;rdf:RDF&gt;根元素和&lt;rdf:Description&gt;元素,后者用about属性标识资源。RDF还支持容器(如&lt;Bag&gt;、&lt;Seq&gt;和&lt;Alt&gt;)来描述集合。RDFS是RDF的扩展,提供描述类和属性的框架,而达布林核心是一组预定义属性,用于描述文档。
京东云开发者 京东云开发者
7个月前
浅谈SQL优化小技巧
作者:京东零售王军回顾:MySQL的执行过程回顾MySQL的执行过程,帮助介绍如何进行sql优化。(1)客户端发送一条查询语句到服务器;(2)服务器先查询缓存,如果命中缓存,则立即返回存储在缓存中的数据;(3)未命中缓存后,MySQL通过关键字将SQL语句
史湘云
史湘云
Lv1
惊鸿一瞥而后不知所踪,这大概就是晚霞的美之所在。
文章
5
粉丝
0
获赞
0