人大金仓数据库KingbaseES SQL语句简介

金仓数据库KingbaseES SQL语句简介

关键字:

KingbaseES、SQL、人大金仓、KingbaseES

SQL算子

对于数据库系统使用的SQL语言而言, SQL算子是SQL语句执行过程中各个步骤的具体动作,包含了部分SQL的关键字。

  • From 算子:是SQL语句中最基本的算子,用于定位SQL语句的操作对象,主要出现在SELECT语句中,但DDL语句和DML语句中则隐式地包含了From算子。
  • Scan算子:是用于扫描操作的算子,作用于表和视图。Scan算子根据扫描的执行方式可以分为SeqScan算子和IndexScan算子,分别执行顺序扫描和基于索引扫描。
  • Filter算子:是条件过滤算子,用于在SQL语句中根据一定的条件过程表或视图中的数据。Filter算子中至少包含一个过滤条件,且Filter算子中可以包含非常复杂的过滤条件。
  • Join算子:是用于完成连接操作的所有算子的统称,Join算子本身包含了连接条件。在具体的SQL语句中,Join算子可以隐式表达,也可以表达为join......on......形式。
  • 分组算子:是完成分组操作的算子,最常用的是Group算子和Having算子,还包括Cube算子、Rollup算子等。 Group算子是完成分组操作的核心算子,而having算子则提供了分组筛选条件。
  • Order算子:是SQL语句中用于执行排序操作的算子。排序操作是SQL语句中的常见操作,也是重要操作,而排序算子的具体实现,在不同的数据库中经常不同,同一种数据中也会提供多种算法用于完成排序。
  • 投影算子:是SELECT语句中的必要组成部分,表达了SELECT语句的输出内容的结构。投影算子可以有多种形式,甚至投影列本身就是一个独立的SQL语句(子查询),最常见的表现形式是表或视图中的列,此外还可以表现为Scalar算子、Aggregation算子或Window算子。
    • Scalar算子是完成标量运算的算子,都涉及到标量函数运算。
    • Aggregation 算子是聚合运算算子,包括COUNT、MAX/MIN、SUM/AVG等,通常结合分组算子出现。
    • Window算子是窗口操作算子,以窗口函数形式出现。Window算子是个复合结构,可以进一步细分为窗口函数算子、Over算子、Partition算子和Order算子。
  • Value算子:是完成非投影部分的求值运算的算子,一般表现为标量函数,通常出现于其他多种算子的各种表达式中,比如出现在Filter算子或Join算子中完成过滤条件表达式或连接条件表达式的求值运算。
  • Top N算子:是完成限定操作的算子的统称,限定操作指的是基于结果集并在结果集上完成某种行为的操作,Top N算子的最典型的应用场景是分页。
  • Top N算子具体可以表达为Top、Limit、Offset、RowNum等关键字。
  • Exchange算子:是SQL语句执行过程中在各个执行步骤之内或之间完成数据交换的算子,在并行场景或分布式场景中起作用。Exchange算子是由数据库引擎调度的算子,其动作不能由人工参与。

SQL算子的一般执行顺序如下:

D:\Account\Desktop\ns_attach_image_118251690336724829.png

在优化器的作用下,上面执行顺序可能会有变化,比如有可能会先执行Group算子的操作,之后再进行Join算子的操作。

谓词

BETWEEN、LIKE、IN、IS NULL、=、<、>等关键词都可以称之为SQL中谓词,它是一种返回值只为真值(true、false或者unknown)的特殊函数。数据库谓词目的是为了给SQL命题提供判断真假的手段, 而这里的事实我们则可以理解为真命题。谓词用于where子句和having子句的搜索条件中,还用于from子句的连接条件及需要布尔值的其他构造中。

谓词和函数区别在于函数返回值有可能是数字、字符串或者日期等; 谓词的返回值全部是真值(TRUE/FALSE/UNKNOWN)。因此谓词的形式更像是编程语言中的布尔表达式

  • Like谓词:模糊匹配,当需要进行字符串的部分一致查询时需要使用该谓词。 其中提到的部分一致大体可以分为前方一致(string%)、中间一致(%string%)和后方一致(%string)三种类型。
  • Between谓词:范围查询 使用BETWEEN可以进行范围查询,该谓词与其他谓词或者函数的不同之处在于它使用了3个参数(where a between c and d)。
  • IS NULL 、IS NOT NULL谓词:判断是否为NULL。为了选取出某些值为NULL 列的数据不能使用=,而只能使用特定的谓词IS NULL。
  • IN、NOT IN谓词:Or的简便用法。为了选取出值为某些固定结果的内容,可以使用Or。但当结果较多时where子句会非常长,因此可以使用In字句将(where a=1 or a=2 or a=3; )替换为(where a in (1, 2, 3))。同时IN可以用作子查询,即有(where a in (select * from t2))
  • EXISTS谓词:用于“判断是否存在满足某种条件的记录”。如果存在这样的记录就返回真(TRUE),如果不存在就返回假(FALSE)。 EXISTS(存在)谓词的主语是“记录”。EXISTS只需要在右侧书写1个参数,该参数通常都会是一个子查询。可以使用in(或者not in)代替。
    • EXISTS与IN的区别:
      • EXISTS 会先将外表数据全部取出,通过loop将外表取出,接着逐一匹配内表是否有相同内容,相同则保存至结果集;
      • IN查询内表,然后与外表做笛卡尔积,接着通过查询条件将不符合条件的删除,并将结果用作结果集输出。

数据库子链接和子查询

子链接

出现在 WHERE/ON 等约束条件中或投影中的子句是子连接语句。其中包含相关子链接与非相关子链接。

  • 相关子连接:指在子查询语句中引用了外层表的列属性,这就导致外层表每获得一个元组,子查询就需要重新执行一次。
  • 非相关子连接:指子查询语句是独立的,和外层的表没有直接的关联,子查询可以单独执行一次,外层表可以重复利用子查询的执行结果。

子查询

子查询是查询语句中经常出现的一种类型,是比较耗时的操作。优化子查询对查询效率的提升有着直接的影响,所以子查询优化技术,是数据库查询优化引擎的重要研究内容。从子查询出现在SQL的位置看,它可以出现在目标列、FROM子句、WHERE子句、JOIN/ON子句、GROUP BY、GROUP BY子句、HAVING子句、ORDER BY子句等位置。

根据子查询中涉及的关系对象与外层关系对象的联系,子查询可以分为相关子查询与非相关子查询:

  • 相关子查询:子查询的执行依赖于外层父查询的一些属性值。子查询因依赖于父查询的参数,当父查询的参数改变时,子查询需要根据新参数值重新执行。
  • 非相关子查询:子查询的执行不依赖于外层父查询的任何属性值,这样的子查询具有独立性,可独自求解,形成一个子查询计划先于外层的查询求解。

从特定谓词看,子查询可分为以下3类:

  • not in/all/any/some子查询。语义相近,左面是操作符,右面是子查询,是最常见的子查询类型之一。
  • not exists子查询。半连接语义,没有左操作符,右面是子查询,也是最常见的子查询类型之一。
  • 其他子查询。除了上述两种外的所有子查询。

从语句的构成复杂度看,子查询可分为以下3类:

  • SPJ子查询:由选择、连接、投影操作组成的查询。
  • GROUY BY子查询:SPJ子查询加上分组、聚集操作组成的查询。
  • 其他子查询: GROUY BY子查询中加上其他子句如Top-N、LIMIT/OFFSET、集合、排序等操作。后两种子查询有时合称非SPJ子查询。

从结果集的角度看,子查询分为以下4类:

  • 标量子查询:子查询返回的结果集类型是一个单一值。
  • 列子查询:子查询返回的结果集类型是一条单一元祖。
  • 行子查询:子查询返回的结果集类型是一个单一列。
  • 表子查询:子查询返回的结果集类型是一个表(多行多列)。

数据库执行计划

KES中有多重查看执行计划的方式,具体如下表:

查看方式

特点

使用explain命令查看

可查看指定SQL语句在当前session下的执行计划,调试方便

使用对象管理工具查看

使用auto_explain查看

可记录所有后台SQL语句的执行计划:ksql、jdbc等

其中explain:KES中查看执行计划的一种方式,查看顺序为从上往下,从内往外。其命令格式如下:

  • explain [option] statement

option为可选项,可以是以下5种情况的组合:

  • analyze:执行命令并显示执行事件,默认false
  • verbose:显示附加信息,比如计划树中每个节点输出的字段名等,默认false
  • costs:显示执行计划的成本,默认true
  • buffers:显示缓冲区的使用信息,包括共享快、本地块和临时读写块,默认false,前置条件是analyze
  • format:指定执行计划的输出格式,支持:TEXT、XML、JSON或者YAML,默认是text
  • 12
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值