lightdb22.2-增强对oracle hint的兼容

Posted 紫无之紫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lightdb22.2-增强对oracle hint的兼容相关的知识,希望对你有一定的参考价值。

LightDB22.2-增强对oracle hint 特性的兼容(二)

1. 逗号分隔

oracle 可以使用逗号或空格来分隔参数,原先 lightdb使用空格来分隔参数,现在也支持逗号来分隔参数,示例如下:use_hash(a,b,c)

2. 大小写不敏感

oracle 对于 hint 中指定的表名是不区分大小写的,即use_hash(a)use_hash(A)相同。

lightdb 之前版本 hint 中使用的表名是区分大小写的,这个版本开始改为不区分大小写,对于指定的表名都转为小写(与sql相同,在sql中表名会转为小写),通过加双引号不表明不进行转换。即 use_hash(a)use_hash(A) 相同,use_hash("a")use_hash(A)相同, use_hash("A") use_hash(A) 不同。

3. parallel hint 支持语句级

oracle 支持对语句使用parallel hint,如下:

select/*+parallel(4)*/ * from t1,t2 where t1.id=t2.id;

parallel 会对 t1 和 t2 表都生效。

现在 lightdb 也支持上述用法,用来对一个查询块中的所有表指定并发。

4. 支持scan, join hint 作用于单表子查询中的单表

Access path and join hints on referenced views are ignored unless the view contains a single table or references an Additional Hints view with a single table. For such single-table views, an access path hint or a join hint on the view applies to the table inside the view.

在 oracle 中access path 和join hint 会作用于单表子查询中的单表,如下所示:

select/*+full(y) use_hash(t1 y)*/ * from t1,(select * from (select * from t2 where id>10)x where x.id<100) where t1.id=y.id;

正常来说,full 不会对view起效,而y merge 后 会消失,use_hash(t1 y) 也不应该起效,但oracle 对于这种情况会进行特殊处理,full(y) 会对 t2 表起效,相当于 full(y) 转换为了 full(t2@xxx)use_hash(t1 y)相当于转换为了 use_hash(t1 t2@xxx)

现在 lightdb 也支持了这个特性。可以方便的进行迁移。

以上是关于lightdb22.2-增强对oracle hint的兼容的主要内容,如果未能解决你的问题,请参考以下文章

lightdb22.2-oracle模式下新增支持asciistr函数

lightdb22.2-oracle模式下新增支持asciistr函数

lightdb22.2-新增集群启停脚本

lightdb22.2-新增集群启停脚本

lightdb22.3特性预览-增强对oracle内置函数的兼容

lightdb22.3特性预览-增强对oracle内置函数的兼容