- 博客(34)
- 资源 (13)
- 收藏
- 关注
原创 PostgreSQL——查询编译部分小结
2021SC@SDUSC博客最终小结数据库管理系统中,对性能影响最大的是查询处理器。查询处理器由查询编译器和执行器两部分组成,而查询编译器又包括查询分析器、查询预处理器和查询优化器。规划器/优化器的任务是创建一个优化了的执行计划。它首先生成完成查询所有可能的路径。这样创建的所有路径都产生相同的查询结果,而优化器的任务就是计算每个路径的开销并且找出开销最小的那条路径。PostgresQL, 采用的优化算法是以穷尽搜索算法为基础的,并在此基础上进行了改进,同时还采用了遗传算法作为辅助,系统能够有选择地采
2021-12-26 23:41:22
690
原创 PostgreSQL——代价估计
2021SC@SDUSC目录概述代价估算公式选择度单个表的扫描代价两个表的连接代价总结概述我负责的PostgreSQL代码部分:查询的编译与执行此篇博客的分析内容:代价估计 在前几篇博客中,我介绍了查询优化的一些步骤和相关函数。在PostgreSQL的查询优化过程中,查询请求的不同执行方案是通过建立不同的路径(Path)来表达的。在生成了许多符合条件的路径之后,要从中选择出代价最小的路径,把它转化为一个计划,传递给执行器执行。因此,优化器的核心工作是建立多条路径,然后从中找出最优的那一条。同一个查询
2021-12-26 23:38:05
2002
1
原创 PostgreSQL——查询优化——整理计划树
2021SC@SDUSC目录概述set_plan_references函数概述我负责的PostgreSQL代码部分:查询的编译与执行此篇博客的分析内容:查询优化——生成计划查询优化的整个过程可以分为预处理,生成路径和生成计划三个阶段。在上一篇博客中我分析了生成完整计划的过程和其中调用的函数在这篇博客中我会分析查询优化的最后一步同时也是生成计划的最后一步——整理计划树生成的完整计划经过计划树整理后就可以交给查询执行器去执行了,负责整理工作的主函数是set_plan_references函数。整理计
2021-12-26 00:10:52
1924
原创 PostgreSQL——查询优化——生成优化计划2
2021SC@SDUSC目录概述生成完整计划创建聚集计划节点make_agg函数执行流程make_agg函数make_agg函数返回的结构体——Aggmake_agg函数调用——copy_plan_costsize函数——获得左子树代价make_agg函数调用——cost_agg函数——计算聚集代价make_agg函数调用——cost_qual_eval函数——计算Having字句代价创建排序计划节点make_sort函数执行流程make_sort函数make_sort函数返回的结构体——Sortmake
2021-12-24 22:38:03
900
原创 PostgreSQL——查询优化——生成优化计划1
2021SC@SDUSC目录概述生成可优化的MIN/MAX聚集计划preprocess_minmax_aggregates函数生成普通计划扫描计划——顺序扫描create_seqscan_plan函数执行流程create_seqscan_plan函数create_seqscan_plan函数返回的结构体——Scan连接计划——嵌套循环连接create_nestloop_plan函数执行流程create_nestloop_plan函数create_nestloop_plan函数最后返回的结构体——NestL
2021-12-18 09:31:30
984
原创 PostgreSQL——查询优化——生成路径3
2021SC@SDUSC目录概述生成索引扫描路径create_index_paths函数create_index_paths函数调用的—— generate_bitmap_or_paths函数生成TID扫描路径create_tidscan_paths函数生成最终路径make_rel_from_joinlist函数总结概述我负责的PostgreSQL代码部分:查询的编译与执行此篇博客的分析内容:查询优化——生成路径查询优化的整个过程可以分为预处理,生成路径和生成计划三个阶段。在上一篇博客中,我分析
2021-12-11 08:49:57
889
原创 PostgreSQL——查询优化——生成路径2
2021SC@SDUSC目录概述set_append_rel_pathlistAppendRelInfo结构体set_subquery_pathlistset_function_pathlistset_values_pathlist递归——set_worktable_pathlist非递归——set_cte_pathlistset_plain_rel_pathlist总结概述我负责的PostgreSQL代码部分:查询的编译与执行此篇博客的分析内容:查询优化——生成路径查询优化的整个过程可以分为预处
2021-12-04 09:30:19
745
原创 PostgreSQL——查询优化——生成路径1
2021SC@SDUSC目录概述query_planner函数RelOptInfo结构体Path结构体query_planner函数调用的——make_one_rel函数make_one_rel函数调用的—— set_base_rel_pathlists函数make_one_rel函数调用的—— make_rel_from_joinlist函数路径生成算法动态规划算法遗传算法总结概述我负责的PostgreSQL代码部分:查询的编译与执行此篇博客的分析内容:查询优化——生成路径查询优化的整个过程可以
2021-11-23 22:41:51
1620
原创 PostgreSQL——查询优化——预处理
2021SC@SDUSC目录概述查询优化pg_plan_queries函数pg_plan_queries函数调用的—— **pg_plan_query函数**pg_plan_queries函数返回的—— **PlannedStmt结构体**pg_plan_query函数调用的——**planner函数**standard_planner函数调用的——**subquery_planner函数**subquery_planner函数返回的——**Plan结构体**概述我负责的PostgreSQL代码部分:
2021-11-20 10:41:49
2862
原创 PostgreSQL——查询重写——删除重写规则以及对查询树进行重写
2021SC@SDUSC目录概述查询重写——删除重写规则删除重写规则的主要函数——RemoveRewriteRuleById函数查询重写—— 对查询树进行重写QueryRewrite函数QueryRewrite函数调用的RewriteQuery函数——处理非select规则的重写QueryRewrite函数调用的fireRIRrules函数——处理select规则的重写总结概述我负责的PostgreSQL代码部分:查询的编译与执行此篇博客的分析内容:查询重写的处理操作——删除重写规则和查询树的重写
2021-11-13 11:37:19
1584
原创 PostgreSQL——查询重写——定义规则
2021SC@SDUSC目录概述查询重写查询重写的核心----规则系统查询重写的处理操作查询重写的处理操作——定义规则总结概述我负责的PostgreSQL代码部分:查询的编译与执行此篇博客分析内容:查询重写之前的博客分析完了语义分析,Postgresql经过语义分析步骤得到了查询树。在获取查询树之后会立刻对查询树进行查询重写处理。所以接下来我会分析查询处理流程中的查询重写查询重写查询重写:对语义分析后的查询树重写并生成新的查询树,以提供对规则和视图的支持查询重写模块使用规则系统判断来进行查
2021-11-06 09:39:32
2039
原创 PostgreSQL——语义分析3——目标属性及Where子句
2021SC@SDUSC目录概述目标属性的语义分析TransformTargetList函数ResTarget结构体TransformTargetEntry函数makeTargetEntry函数TargetEntry结构体TransformExpr函数Var结构体Where子句的语义分析TransformWhereClause函数语义分析部分总结概述我负责的PostgreSQL代码部分:查询的编译与执行此篇博客分析内容:目标属性的语义分析上篇博客,我分析了from子句的语义分析,大体了解了Post
2021-10-26 20:05:15
1079
原创 PostgreSql——语义分析2——From子句的语义分析处理
2021SC@SDUSC目录概述transformFromClauseItem函数的输入参数——RangeTblEntry结构体transformFromClauseItem函数分析总结概述我负责的PostgreSQL代码部分:查询的编译与执行此篇博客的分析内容:From子句的语义分析处理From子句的语义分析主要由TransformFromClause函数处理,并生成范围表。而TransformFromClause函数主要调用transformFromClauseItem对from claus
2021-10-23 13:32:59
954
原创 PostgreSQL---语义分析1
2021SC@SDUSC目录语义分析中涉及的重要结构体:parse_analyze函数transformSelectStmt函数transformSelectStmt函数中涉及的结构体定义及解释总结我负责的PostgreSQL代码部分:查询的编译与执行此篇博客分析内容:语义分析上篇博客我分析了查询分析的词法分析和语法分析,我们可以知道经过词法分析和语法分析我们可以得到一个用SelectStmt结构体存储的分析树,由流程分析图可以得知我们还需经过语法分析才可以得到查询树。语义分析:语义分析阶段会检
2021-10-15 17:15:39
1102
转载 在Mac上安装MPICH,亲测必成功!!
首先看这个教程转载:https://blog.youkuaiyun.com/weixin_43479265/article/details/108697511但是上面的那个教程安装homebrew,我不太成功。所以,安装homebrew,我用的这个教程转载:https://blog.youkuaiyun.com/xx5533/article/details/105832153/最后运行程序的教程:转载:https://blog.youkuaiyun.com/dvd423/article/details/9997979...
2021-10-14 15:38:50
598
原创 PostgreSQL——查询分析
2021SC@SDUSC@TOC一级目录二级目录三级目录我负责的PostgreSQL代码部分:查询的编译与执行此篇博客的分析内容:查询分析源码 原因:由查询处理的完整流程图可知:查询分析是处于核心地位的,统领查询重写和调度等相关内容,所以我按照一个清晰的框架,首先从查询分析入手。 查询分析 功能:由SQL查询语句生成查询树源码路径:src/backend/parser主要部分:词法分析,语法分析,语义分析查询分析执行流程:flowst=>start: Startop=&
2021-10-08 21:15:52
1305
原创 postgresql编译安装与调试
postgresql编译安装与调试目录postgresql编译安装与调试我们首先从官网取Source,官网在这里:https://www.postgresql.org/ftp/source/取到source后,准备开始编译安装。取到源码 我们先解压:tar -zxvf postgresql-9.5.4.tar.gzcd postgresql-9.5.4 进去这里要注意的是,由于我希望后面能跟踪代码的运行路径,所以我要在编译configure的时候加上–enable-debug的选项,并且修
2021-09-29 01:38:49
306
原创 postgreSQL项目综述
postgreSQL项目综述@[目录]#postgreSQL项目总体分析#核心代码分析#分工情况#我负责的部分及文件分析#调试方法##postgreSQL项目总体分析主进程:Postmaster进程辅助进程:SysLogger(系统日志)进程、BgWriter(后台写)进程、WALWrite(预写式日志)进程、PgArch(归档)进程、AutoVacuum(系统自动清理)进程、PgStat(统计收集)进程、CheckPoint()进程。虽然主进程是Postmaster进程,但是post
2021-09-29 01:00:01
580
原创 山东大学数据库实验6-2021年最新版
山东大学数据库实验6-2021年最新版6-1create view test6_01 asselect sid,name,dnamefrom pub.studentwhere dname='物理学院'and age<20order by sid;6-2create view test6_02 asselect sid,name,sum(score) sum_scorefrom pub.student left outer join pub.student_course usi
2021-05-15 11:23:50
1111
3
原创 山东大学数据库实验1(2021年最新版)
山东大学数据库实验1(2021年最新版)creat table test1_student ( sid char(12) not null, name varchar(10) not null, sex char(2), age int, birthday date, dname varchar(30),
2021-05-07 21:54:42
427
1
原创 山东大学数据库实验2(2021年最新版)
山东大学数据库实验2(2021年最新版)本人分步写的,中间有空行的话,代表上一步结束,转向下一步,一个题 由多步完成2create or replace view test2_02 as(select sid,namefrom pub.student_course natural join pub.studentwhere sid!='200900130417'and cid in(select cidfrom pub.student_coursewhere sid='200900130
2021-05-07 21:52:34
667
1
原创 山东大学数据库实验3(2021年最新版)
山东大学数据库实验3(2021年最新版)本人分步写的,中间有空行的话,代表上一步结束,转向下一步,一个题 由多步完成3-1create table test3_01 asselect * from pub.student_31where (substr(sid,0,1) in('0','1','2','3','4','5','6','7','8','9')and substr(sid,1,1) in('0','1','2','3','4','5','6','7','8','9')and su
2021-05-07 21:50:30
902
1
原创 山东大学数据库实验4(2021最新版)
山东大学数据库实验4(2021最新版)本人分步写的,中间有空行的话,代表上一步结束,转向下一步,一个题 由多步完成数据库实验四1create table test4_01 as select *from pub.student_41;alter table test4_01 add sum_score int ;update test4_01set sum_score =(select sum(score)from pub.student_coursewhere test4_01
2021-05-07 21:48:36
1038
2
原创 山东大学数据库实验5(2021年最新版)
山东大学数据库实验5(2021年最新版)本人分步写的,中间有空行的话,代表上一步结束,转向下一步,一个题 由多步完成1create table test5_01 ( first_name varchar(4), frequency numeric(4));insert into test5_01(first_name,frequency)select substr(name,2),count(*)from pub.studentgroup by substr(name,2);2c
2021-05-07 21:43:40
2601
2
原创 山东大学数据结构实验七:图的基本操作---c++实现---超详细注释
山东大学数据结构实验七:图的基本操作—c++实现内含方法:结构体定义图的邻接矩阵,结构体定义队列,队列初始化,出队,入队方法,邻接矩阵初始化,BFS(广度优先搜索)遍历图,DFS(深度优先搜索)遍历图,Floyed方法-----求各顶点间的最短路径;#include<iostream>using namespace std;#define MaxVnum 100//顶点数最大值#define Maxsize 100//队列的最大值typedef int VexType;//顶点类
2020-11-23 17:43:07
1522
原创 山东大学数据结构实验6-堆和搜索树(c++实现)(超详细注释)
山东大学数据结构实验6-堆和搜索树(c++实现)内含方法:下沉操作,创建最大堆,堆排序,插入法创建搜索树,前序遍历,中序遍历#include<iostream>#include<vector>int count1=0;int count2=0;//用count2记录数组中有几个重复的值bool flag=true;//使用flag判断数组中是否有重复的值using namespace std;typedef struct Bnode{ int data;
2020-11-20 14:48:59
932
原创 山东大学数据结构实验五二叉树(C++实现)
山东大学数据结构实验五二叉树包含方法:1,二叉树的创建:根据层次遍历顺序创建;询问法创建,根据前序顺序补空法创建,根据先序顺序和中序顺序创建二叉树2,二叉树的遍历:先序遍历,中序遍历,后序遍历,层次遍历3,二叉树的节点计算4,二叉树的叶子数计算5,二叉树的深度计算6,二叉树的节点存储空间的回收头文件#ifndef ERCHASHU_H#define ERCHASHU_H#endif#include<iostream>#include<stdio.h>#in
2020-11-15 22:34:22
781
原创 山东大学数据结构实验4--使用栈计算多项式(超级详细注释)
##使用顺序栈 完成多项式计算内含栈的基本方法:出栈,压栈,置空栈,get栈顶元素,栈的初始化,栈的结构体定义,栈的判空实验大纲中要求的是int类型的结果,只需要把代码中的double型数据和方法换成int型即可我写成double型,是为了以后可以用程序来计算多项式,当作一个多项式计算器头文件#ifndef BIAODASHIJISUAN_H#define BIAODASHIJISUAN_H#endif#include<iostream>#include<stdio.h&
2020-11-09 12:50:24
802
原创 c++实现数据结构顺序表的10种基本操作
c++实现数据结构顺序表:初始化顺序表, 创建顺序表,增加顺序表的空间,取值,查找操作-按值查找,插入,删除,求表长,判空,合并有序(递增)顺序表,输出顺序表顺序表优点:随机存取,只要O(1)的时间就可以取出第i 个元素顺序表缺点:需要预先分配最大空间,空间过大会造成浪费,插入和删除操作需要移动大量元素头文件代码:#ifndef SHUNXUBIAO_H#define SHUNXUBIAO_H#endif#include<iostream>#include<stdli
2020-11-01 15:37:49
1554
原创 c++实现单链表的最全的超详细的20种方法
链表初始化,头插法创建链表,尾插法创建链表,取值,查找(第i个节点的数据域或者数据域为某个特定值的节点),有顺序的合并两个链表,无顺序的合并两个链表,插入,删除,逆置链表,就地逆置链表求链表的节点个数,删除数据域重复的节点,输出链表,判空,置空链表,使用快慢指针高效找到中间节点,使用快慢指针高效找到倒数第k个节点,有序链表的合并。链表的优点:动态存储,不需要预先分配最大空间,插入删除时不需要移动元素链表缺点:每次动态分配一个节点,每个节点的地址是不连续的,需要有指针记录下一个节点的地址,指针域需要占
2020-11-01 15:28:52
2706
1
原创 山东大学数据结构实验三链表:投机取巧的方法C++实现
山东大学数据结构实验三链表投机取巧的方法:有序合并链表的不用再单独写合并的链表的方法,要求输出排好序的链表也不需要对链表进行排序,直接对数组进行操作(可以复制粘贴实验二的各种排序算法),不断调用尾插法创建单链表运用到的方法:1冒泡排序法 2尾插法创建单链表 3输出链表4查找#include<iostream>#include<stdio.h>#include<stdlib.h>#include<vector>#define ElemType in
2020-10-29 18:46:34
478
2
原创 C++实现单链表的16种基本操作
C++实现单链表的16种基本操作链表初始化,头插法创建链表,尾插法创建链表,取值,查找(第i个节点的数据域或者数据域为某个特定值的节点),有顺序的合并两个链表,无顺序的合并两个链表,插入,删除,逆置链表,求链表的节点个数,删除数据域重复的节点,输出链表,判空,置空链表。以下是我写的头文件的代码#ifndef DANLIANBIAO_H#define DANLIANBIAO_H#endif#include<iostream>#include<stdio.h>#inclu
2020-10-29 18:27:52
2625
1
原创 PTA基础编程题:7-22 龟兔赛跑(20分)c++
题目:乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?代码#include<iostream>using namespace std;int main(){ int n,
2020-10-17 17:36:46
922
原创 PTA基础编程题:7-22 龟兔赛跑(20分)
PTA基础编程题:7-22 龟兔赛跑(20分)题目:乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?**`代码:`**#includeusing namespace std;int ma
2020-10-17 17:21:59
288
山东大学软件学院软件开发解决方案
2023-01-06
山东大学软件学院电子商务概论
2023-01-06
山东大学软件学院机器学习期末考试
2022-06-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人