一、SQL查询主要组件
这些组件主要包括会话(Session),SQL前端(SQL Frontend), SQL优化器(SQL Optimizer)和执行计划(Execution Plan)、SQL计划缓存(SQL Plan Cache)。
以下是对这些组件的概述:
会话层(Session):这是处理SQL查询的第一层,类似于API,可以创建具有不同属性的会话。这些会话后续用于创建新的事务和工作线程。
这是查询开始的地方,有点像接待处。当我们使用不同的客户端工作时,会创建具有不同属性的会话,就像不同的工作空间一样。
SQL前端(SQL Frontend):这是SQL语句的解析和检查发生的地方。在这里,语句被转换成编译器可以理解的形式,然后进行语法和语义的检查。如果SQL语句有错误,将会触发错误并导致语句执行失败。
这个环节主要是对我们的查询做初步的检查和理解,就像一个翻译员,确保我们的查询语法正确,语义明确。
查询优化器(SQL Optimizer):这是一个经过语言转换的基础对象,它的主要任务是优化查询,以提升运行速度并保证数据完整性。它首先应用一套逻辑重写规则来改进性能,然后进行成本枚举,以估算不同方案的成本。
这个环节的任务是找出执行查询的最好方式,就像我们的策略规划师,他会考虑多种可能的执行方案,然后选择一个最合适的。
执行器(Execution Plan):优化完成后,会创建执行计划并将其发送到执行引擎。SAP HANA有两种执行引擎,行引擎和列引擎。行引擎是一个通用的处理引擎,列引擎是SAP HANA特有的,以列为单位处理数据。
这个环节就是真正去执行我们的查询,它会根据优化器给出的方案,将任务分配给两种不同的引擎,行引擎和列引擎,来完成实际的工作。
SQL计划缓存(SQL Plan Cache):这是存储查询计划的地方,旨在最小化查询的编译时间。它的底层是监视视图M_SQL_PLAN_CACHE,这是一个大表,主键包括用户、会话、模式、语句等。搜索特定的缓存条目或保证查询有缓存命中,需要输入正确的键值。管理SQL计划缓存需要在缓存存储大小和频繁的缓存命中之间取得平衡。
这是一个存储查询方案的空间,如果我们的查询经常用到,就可以把它存起来,下次就可以直接用,不用再重新计划,就像我们的小秘书一样,帮我们记住了一些常用的东西,方便我们下次直接用。
今天主要聊一聊优化器。
二、SQLScript优化器
SQLScript优化器规则:SAP HANA的SQLScript优化器通常遵循四种规则来提高查询的效率和性能。
常量传播:这个规则关注于评估和折叠常量SQL表达式,并将这个计算出的值通过整个值链进行传播。<