数据库驱动程序分析 - SQL by pass & 经典执行器
2024-02-02 12:18:06
SQL by pass适应的一幕有:
只全力支持indexscan和indexonlyscan,且全部WHERE解释器的过滤条件都在目录上。 只全力支持单备注增删改查,不全力支持join、using。 只全力支持行存备注,不全力支持分区备注,备注不全力支持有触发器。 不全力支持active sql、QPS等信息统计样本特性。 不全力支持悄悄扩容和缩容的备注。 不全力支持检索或者改动系统列于。只全力支持比较简单SELECT解释器,例如:
SELECTc3 FROMt1 WHEREc1 = ? andc2 = 10;仅可以检索目标备注的列于,c1和c2列于为目录列于,上去可以是也就是说或者给定,可以使用 for update。
只全力支持比较简单INSERT解释器,例如: INSERTINTOt1 VALUES(?, 10,?);仅全力支持一个VALUES,VALUES里的多种类型可以是也就是说和给定,不全力支持returning。
只全力支持比较简单DELETE解释器,例如: DELETEFROMt1 WHEREc1 = ? andc2 = 10;c1和c2列于为目录列于,上去可以是也就是说或者给定。
只全力支持比较简单UPDATE解释器,例如: UPDATEt1 SETc3 = c3+? WHEREc1 = ? andc2 = 10;c3列于改动的值可以是也就是说和给定,也可以是一个比较简单的操作符,c1和c2列于为目录列于,上去可以是也就是说或者给定。
02
开端的执行者器
停止enable_opfusion,比较简单insert的执行者计划案是这样的:
在这种执行者工序中Portal是执行者SQL解释器的载形体,每一条SQL完全一致唯一的Portal,完全相同的检索多种类型完全一致的Portal多种类型也有区别。
typedefenumPortalStrategy { PORTAL_ONE_SELECT, // SQL解释器值得注意单一的SELECT检索 PORTAL_ONE_RETURNING, // INSERT/UPDATE/DELETE解释器值得注意Returning PORTAL_ONE_MOD_WITH, // 检索解释器值得注意With PORTAL_UTIL_SELECT, // 工具多种类型检索解释器,如explain PORTAL_MULTI_QUERY // 所有其他多种类型检索解释器 } PortalStrategy;Portal的生命周期行政在exec_simple_query备注达式中意味着,该备注达式都由Portal创建、执行者和弃置。Portal执行者的主要执行者工序之外PortalStart备注达式、PortalRun备注达式、PortalDrop备注达式几个部份。其中PortalStart备注达式都由进行Portal结构形体模板工作,之外执行者算子模板、寄存器词法分配等;PortalRun备注达式都由毫无疑问的执行者和运算,它是执行者器的核心;PortalDrop备注达式都由之前的弃置工作,主要是数组、内存的弃置。
PortalRun备注达式根据检索多种类型转至完全相同的处理备注达式:
boolPortalRun( Portal portal, longcount, boolisTopLevel, DestReceiver* dest, DestReceiver* altdest, char* completionTag ) { … switch(portal->strategy) { casePORTAL_ONE_SELECT: … casePORTAL_MULTI_QUERY: // insert从这里转至 PortalRunMulti(portal, isTopLevel, dest, altdest, completionTag); /* Prevent portal's commands from being re-executed */ MarkPortalDone(portal); /* Always complete at end of RunMulti */ result = true; break; … }最终执行者ExecInsertT顺利进行样本插入。
# 0ExecInsertT< false> (state= 0x7fdbf1836060, slot= 0x7fdbf0c86460, planSlot= 0x7fdbf0c86460, estate= 0x7fdbf0c74060, canSetTag= true, options= 0, partitionList= 0x7fdbf3125860) at nodeModifyTable.cpp: 800 # 10x0000000001a684cdin ExecModifyTable (node= 0x7fdbf1836060) at nodeModifyTable.cpp: 3043 # 20x00000000019f3f93 in ExecModifyTableWrap (node= 0x7fdbf1836060) at execProcnode.cpp: 785 # 30x00000000019f43b5 in ExecProcNode (node= 0x7fdbf1836060) at execProcnode.cpp: 1038 # 40x00000000019ed9d5 in ExecutePlan (estate= 0x7fdbf0c74060, planstate= 0x7fdbf1836060, operation=CMD_INSERT, sendTuples= false, numberTuples= 0, direction=ForwardScanDirection, dest= 0x7fdbf13bb9c8, motJitContext= 0x0) at execMain.cpp: 2163 # 50x00000000019ea25ain standard_ExecutorRun (queryDesc= 0x7fdbf1558060, direction=ForwardScanDirection, count= 0) at execMain.cpp: 608 # 60x000000000181d6efin explain_ExecutorRun (queryDesc= 0x7fdbf1558060, direction=ForwardScanDirection, count= 0) at auto_explain.cpp: 121 # 70x00000000019e9dee in ExecutorRun (queryDesc= 0x7fdbf1558060, direction=ForwardScanDirection, count= 0) at execMain.cpp: 486 # 80x000000000194fed6 in ProcessQuery (plan= 0x7fdbf0b7b2e0, sourceText= 0x7fdbf13ba060 "insert into t1 values(1,200);", params= 0x0, isMOTTable= false, motJitContext= 0x0, dest= 0x7fdbf13bb9c8, completionTag= 0x7fdbf3126020 "") at pquery.cpp: 292 # 90x0000000001953fa1 in PortalRunMulti (portal= 0x7fdbf0c7a060, isTopLevel= true, dest= 0x7fdbf13bb9c8, altdest= 0x7fdbf13bb9c8, completionTag= 0x7fdbf3126020 "") at pquery.cpp: 1889 # 100x00000000019525e0in PortalRun (portal= 0x7fdbf0c7a060, count= 9223372036854775807, isTopLevel= true, dest= 0x7fdbf13bb9c8, altdest= 0x7fdbf13bb9c8, completionTag= 0x7fdbf3126020 "") at pquery.cpp: 1191 # 110x000000000193ac65in exec_simple_query (query_string= 0x7fdbf13ba060 "insert into t1 values(1,200);", messageType=QUERY_MESSAGE, msg= 0x7fdbf3126210) at postgres.cpp: 2720以上分析了比较简单insert解释器的两种执行者工序,对于delete,update,select基本工作工序一致。
END
这里有最新开源资讯、操作系统更新、技术零售商店等素材
点这里 ↓↓↓ 记得 关注✔ 标星⭐ 哦~
。十二指肠溃疡引起腹泻吃什么药好深圳苹果手机售后维修
上火了喉咙痛吃什么药
长沙试管婴儿多少钱一次
流感嗓子疼怎么简单有效的治疗
下一篇: 下城唱衰美股财报季,但四季度反弹
- 笑惨死在网友评论区!人民日报“我不是小孩”女主账号曝光吸粉无数
- 卤排骨,比红烧糖醋都好吃,卤味浓郁,香而不腻,啃起来很自嘲
- 重返六七年前!价格“月光宝盒”开启
- 大话西游2:过21所称给了件毕业衣服,光看蓝字就能值8000吧?
- 西葫芦别炒了,教你新吃法,太好吃了,大人男孩都爱吃
- 社区食堂、早餐铺、咖啡馆……长宁这家菜场里竟然“藏”着一条“美食街”!
- 强行回忆杀,提词器出戏,游戏结果尴尬,煽情,这期《王牌》两车
- 办公室便当土豆咖喱鸡汤,汤盒打开的那一刻,让同事们流口水
- 商品价格几乎腰斩!有商户一天卖5000斤!很多人都爱
- 《新白娘子传奇》底下的白素贞武力值如何,放在《西游记》是啥段位
- 这道菜做起来有劲道,好玩又好玩,大冷天吃起来真是过瘾,怪不得东北人那么爱
- 太突然!价格大跳水,上海出发部分降幅达80%!粉丝懊悔:再也不提前买了
- 关晓彤COS孙尚香热度登顶,戚薇木兰被爆夸,玩家请求沈腾出战
- 来刚才,我家的中秋节午餐人满为患,开心又惬意
- 非法改装灯光,出租车一楼候客时被查
- 你知道《三国杀》里坏蛋的技能典故是什么吗?(一)
- 电饭煲做的5道美食,短时间内美味,零难度,厨房新手也能学会
- 孕期会流产、宝宝吐泡泡、走路很难看……专家:分娩科学吃蟹没事,这些“锅”螃蟹可不背
- 元旦紧接著首对南方小土豆和北方185大葱牵手成功,东北姐姐给建议
- 春节宅在家,老公学会了炸小油条,简单快挥,比早餐店还好吃