KingbaseES函数三态】的更多相关文章

背景:客户现场的一次艰苦的调优过程(https://www.cnblogs.com/kingbase/p/16015834.html),让我觉得非常有必要让数据库用户了解函数的不同稳定性属性,及其对于SQL性能可能带来的影响.很多DBA.开发人员根本就不在意,或者根本就没意识到函数稳定性对于性能的影响,这就导致出现性能问题时没有头绪.以下的例子都是实际客户现场问题的提炼,为了让用户有直观的了解. 一.函数的三种稳定态 函数的稳定性状态,简单地说就是相同的输入参数情况下,函数返回值是否相同.稳定性…
函数返回值一般是某一类型值,如int,varchar,date等,返回结果集时就需要用到setof语法. 创建数据 create table class(id number primary key, name varchar(20)); create table student(id number, name varchar(20),classtid number references class); insert into class values (1, '六年一班'),(2, '六年二班'…
一.函数的属性 KingbaseES 函数在定义时有三种稳定性级别:volatile.stable 和 immutable.默认情况下,创建函数的稳定性为volatile.以下是这三种函数的区别: Volatile 函数可以做任何事情,包括修改数据库.在调用中,输入同样的参数可能会返回不同的结果,比如:currtid .在一个Query中,对于每一行都会重新计算该函数. Stable 函数不能修改数据库,单个Query中所有行给定同样的参数确保返回相同的结果.这种稳定级别允许优化器将多次函数调用…
KingbaseES提供了多种的时间函数,这些函数在使用过程中存在哪些不同? **同一事务** test=# begin test-# for i in 1.. 10 loop test-# raise notice 'time1:%,time2:%,time3:%,time4:%,time5:%' ,localtimestamp,current_timestamp,now,clock_timestamp,sysdate; test-# select sys_sleep(1); test-# e…
KingbaseES格式化函数提供一套有效的工具用于把各种数据类型(日期/时间.integer.floating point和numeric)转换成格式化的字符串以及反过来从格式化的字符串转换成指定的数据类型. 下面列出了这些函数,它们都遵循一个公共的调用习惯:第一个参数是待格式化的值,而第二个是定义输出或输出格式的模板. 格式化函数 函数 返回类型 描述 例子 to_char(timestamp, text) text 把时间戳转换成字串 to_char(current_timestamp,…
MySQL 的hex 和 unhex 函数类似于KingbaseES 的encode 和 decoding,实现字符与16进制之间的转换. 一.先看MySQL例子 mysql> select hex('kingbase'); +------------------+ | hex('kingbase') | +------------------+ | 6B696E6762617365 | +------------------+ 1 row in set (0.00 sec) mysql> s…
关键字:    行专列,列转行, pivot, unpivot 行列转换是在数据分析中经常用到的一项功能,KingbaseES从V8R6C3B0071版本开始通过扩展插件(kdb_utils_function)支持了pivot和unpivot功能.在之前的版本如果需要进行行列转换操作要如何处理呢?下面介绍通用的写法,最后再介绍pivot和unpivot 用法. 一.行转列(pivot) 构造数据: create table pivot_t1(month integer,fruitname tex…
会话出现了锁等待,想要快速查询到堵塞的会话,可以使用 sys_blocking_pids 函数来实现这一目的. sys_blocking_pids:获取哪些会话阻塞了某个会话(输入参数). sys_backend_pid:返回当前会话的pid 示例: 会话1: test=# select sys_backend_pid(); sys_backend_pid ----------------- 89147 (1 行记录) test=# begin; BEGIN test=# update t_pi…
DENSE_RANK()函数用于为结果集分区内的每一行分配一个排名,排名值之间没有差距,函数为结果集的每个分区中的每一行分配一个等级. 与 RANK() 函数不同的是,DENSE_RANK() 函数总是返回连续的排名值.对于每个分区,DENSE_RANK() 函数为具有相同值的行返回相同的排名. 语法 DENSE_RANK() OVER ( [PARTITION BY partition_expression, ... ] ORDER BY sort_expression [ASC | DESC…
示例 创建函数 create function coalesce_("anyelement","anyelement") returns "anyelement" language sql as $$ select coalesce( $1,$2) $$; create aggregate any_value("anyelement")(sfunc=coalesce_, stype="anyelement"…