怎么将SQL中的plan进行编码从而进行机器学习

根据我们能够跨计划、查询和数据库进行学习的原则以及捕获物理操作符详细信息的目标,我们使用SQL Server支持的物理操作符作为功能维度或属性。

SQL Server支持一组物理运算符(如索引扫描、表扫描、哈希连接等),这些运算符是预先知道的,也不会经常更改。

查询计划是这些物理运算符的树。

物理操作符的另外两个属性与执行成本相关:

(a)并行性:操作符是单线程(串行)还是多线程(并行);

(b)执行模式:操作员是一次处理一行(行模式),还是以矢量化方式处理一批数据项(批模式)。

#相关的知识:

(1)什么是物理运算符?

        操作符描述SQL Server如何执行查询或数据操作语言(DML)语句。 查询优化器使用操作符构建查询计划,以创建查询中指定的结果,或执行DML语句中指定的操作。 查询计划是一个由物理操作符组成的树。 可以使用SET SHOWPLAN语句、SQL Server Management Studio中的图形执行计划选项或SQL Server Profiler SHOWPLAN事件类查看查询计划。

        

操作符分为逻辑操作符和物理操作符。  

(1)逻辑运算符  

        逻辑运算符描述用于处理语句的关系代数操作。 换句话说,逻辑操作符从概念上描述需要执行的操作。  

(2)物理运算符  

        物理运算符实现逻辑运算符所描述的操作。 每个物理运算符都是一个执行操作的对象或例程。 例如,一些物理操作符从表、索引或视图访问列或行。 其他物理操作符执行其他操作,如计算、聚合、数据完整性检查或连接。 物理运算符有相关的成本。

        物理操作符初始化、收集数据和关闭。 具体来说,物理操作符可以回答以下三个方法调用:

  • Init(): The Init() method causes a physical operator to initialize itself and set up any required data structures. The physical operator may receive many Init() calls, though typically a physical operator receives only one.

  • GetNext(): The GetNext() method causes a physical operator to get the first, or subsequent row of data. The physical operator may receive zero or many GetNext() calls.

  • Close(): The Close() method causes a physical operator to perform some clean-up operations and shut itself down. A physical operator only receives one Close() call.

物理运算符和逻辑运算符的映射

        查询优化器将查询计划创建为由逻辑运算符组成的树。查询优化器创建计划后,查询优化器将为每个逻辑运算符选择最有效的物理运算符。查询优化器使用基于开销的方法来确定哪个物理运算符将实现逻辑运算符。

        通常,一个逻辑运算可以由多个物理运算符实现。但是,在极少数情况下,物理运算符也可以实现多个逻辑操作。

(2)并行性是怎么回事?

为每个任务生成的工作线程数取决于以下因素:

  • 请求是否符合并行要求(由查询优化器确定)。
  • 根据当前负载,系统的实际可用的并行度 (DOP) 是多少。 它可能不同于估计的 DOP,后者基于最大并行度 (MAXDOP) 的服务器配置。 例如,MAXDOP 的服务器配置可能是 8,但在运行时可用的 DOP 可能仅为 2,这样则会影响查询性能。

(3)行模式和批处理模式是怎么回事?

        编码的格式:〈Physical Operator〉_〈Execution Mode〉_〈Parallelism〉

执行的模型要么是row要么是batch,以及平行的方式要么是serial要么是parallel。

实例如下:〈Seek_Row_Serial〉,〈HashJoin_Row_Serial〉,〈Scan_Batch_Parallel〉,因为物理操作符是固定的,所以keys的集合也是固定的。

对于给定的查询计划,我们为每个KEY分配一个值,

(1)衡量计划中的响应的operators的工作量。

(2)对结构信息进行编码。

In a plan with multiple operators having the same key,we sum up all the values assigned to the key.If an operator does not appear in a plan,we assign zero to the corresponding key,allowing a fixed dimensionality of the vector.为operators分配值得不同方式编码了不同的信息以及创建了不同的feature channels

表列出了不同的特征通道,weights是怎么计算的,以及information是怎么编码的。每一个通道都有相同的维度。由于每一个特征通道会有一些redundancy,一个subset of channels,通常两个或者三个就足够了,当我们选择一个通道编码a measure of work 以及 structural information。我们同样使用优化器的评估成本作为feature。

Table 1:实例的特征通道with 不同的加权方式,来编码不同类型的信息。所有的estimates都来自查询优化器。

表1显示了编码operators所做工作量的各种方法,我们为每个结点分配一个权重,该权重是从平面中的叶结点到根节点递归计算的。每个叶结点都有一个权重,例如节点输出的估计的行数,每个结点也都有一个高度例如从1开始for the leaves每层都加1。一个节点的value就是sum of weight×height of 他的所有的孩子的高度。计划中的机构的更改(例如,连接顺序的改变,可能会导致不同的孩子的权重以及potentially 节点的heights),于是就会导致不同的feature vectors。

 

 

  考虑EstNodeCost这个编码通道,他用查询优化器估计的节点的成本作为weight,并sums the weights of the same key in the plan.例如<Scan_Row_Serial>对应两个operators,以及他的权重对于这个key来水就是这个weight的相加,50和30,of each operator。

编码 a Pair

在对单个计划进行特征化之后,我们将他们的特征结合起来编码成a pair of plans<P1,P2>。

A key insight driving this combination 是分类器在概念上学习发现plans之间的差异。如果我们重写这个表达式,a regression label就是下面这样的

 Empirically, we observe that if the featurization mimics this 数学编码,来当作labels,他会改善模型的预测性能与紧紧的将两个计划的选定特征通道串联起来相比的化。

我们考虑的第一个数学变换是计算P1和P2对应通道之间的属性差异(computing an attribute-wise difference among the correspoding channels from P1 and P2),我们将这种转换叫做pair_diff.

为了进一步mimic the formula(1),a different transformation 是计算每个通道上的属性差异然后用他除对P1对应的属性,我们叫做pair_diff_ratio

为了克服通道中许多属性值可能为0的问题,我们clip values to a large enough value on division by zero。另一个可选的方案就是,use a different denominator,对于每个通道我们计算他所有属性的综合燃用用它作为坟墓,将属性差异用作分子,将这种转换成为pair_diff_normalized.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:SQL优化器自动优化的功能是指当你写了一个SQL语句时,如果SQL优化器认为你写的SQL语句不够好,它会自动写一个更好的等价SQL语句来执行。\[1\]然而,SQL优化器的自动优化功能可能会干扰我们的人为优化。当我们查看SQL执行计划后,如果我们认为自己写的SQL不够好,我们会尝试去优化它。但是最终的执行计划有时候并不是按照我们优化好的SQL语句来执行的,而是可能会对我们的优化进行改变。\[2\] 对于进行SQL优化,主要涉及以下几个方面: 1. 字符编码:确保数据库和表的字符编码设置正确,以支持文字符的存储和查询。 2. 索引优化:根据实际需求,为经常使用文字段进行查询的列创建合适的索引,以提高查询性能。 3. SQL语句编写:编写高效的SQL语句,避免使用模糊查询或者全表扫描等低效操作,尽量使用索引来加速查询。 4. 数据库参数调优:根据实际情况,调整数据库的参数配置,以提高对文数据的处理效率。 5. 数据库分区:对于大量文数据的表,可以考虑使用数据库分区技术,将数据按照一定的规则进行分区存储,以提高查询性能。 总之,文的SQL优化需要综合考虑字符编码、索引优化、SQL语句编写、数据库参数调优和数据库分区等方面的因素,以提高对文数据的处理效率和查询性能。 #### 引用[.reference_title] - *1* *2* [SQL优化方法及实例](https://blog.csdn.net/aoxida/article/details/119573686)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [PostgreSQL之如何进行SQL优化?](https://blog.csdn.net/weixin_41287260/article/details/125693145)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值