【问题现象】

在编写 SQL 时使用如下 hint 语法:

SELECT /*+ leading(c) */ ...
执行时报错:

YAS-04522 invalid hint leading
image.png
【影响范围】

所有当前 YashanDB 版本;

只要使用 leading hint,都会触发该错误。

【问题分析】

这是由于 YashanDB 优化器目前尚未完全支持leadinghint 语法,该 hint 会被识别为非法提示。

【验证示例】

可使用以下语句验证是否存在此问题:

DROP TABLE a;
DROP TABLE b;
DROP TABLE c;
CREATE TABLE a(tid NUMBER, tname VARCHAR2(30));
CREATE TABLE b(tid NUMBER, tname VARCHAR2(30));
CREATE TABLE c(tid NUMBER, tname VARCHAR2(30));
SELECT /*+ leading(c) */ DISTINCT a.tid
FROM a
LEFT JOIN b ON a.tid = b.tid
LEFT JOIN c ON b.tid = c.tid
WHERE a.tname IS NOT NULL;

执行后会出现 YAS-04522 报错。

【解决方法】

目前版本暂不支持 leading() hint,请:

直接删除该 hint

或 通过改写 SQL 顺序 影响执行计划

【后续建议】

若确需指定 join 顺序,建议通过字段选择性或 join 结构影响优化器;

关注后续版本发布,预计未来将补全对 hint 的支持矩阵。

【总结】

YAS-04522 是因 leading hint 触发的语法识别异常;

并非 SQL 本身有误,而是当前优化器不支持该指令;

去除该 hint 后,即可正常执行。


数据库砖家
1 声望0 粉丝