TIDB中使用hint并不能生效

【 TiDB 使用环境】生产环境 TIDB 4.0.10版本
在使用2张表关联的时候想用hint干预其执行计划,help上也表示该版本支持这些hint,但是实际操作下来总是提示报错,并且执行计划的hint并没有生效,是否是BUG?

SQL语句:
explain
SELECT /+HASH_JOIN(A,C)/
A.C_CODE,C.TYPES
FROM ODS.HIS_CUSTS A
INNER JOIN ODS.USERS C
WHERE A.C_CODE = C.U_CODE
AND A.TDATE = 20230525
提示:There are no matching table names for (A, C) in optimizer hint /*+ HASH_JOIN(a, c) / or /+ TIDB_HJ(a, c) */. Maybe you can use the table alias name
并且执行计划仍是 index join 模式,其实数据量 A 表和C表都是 几百万,应该用hash join更好

【另外】同样的hint问题还有 /+ INL_JOIN(A) / /+ MERGE_JOIN(A,C)/ 都会提示
There are no matching table names for (A, C) in optimizer hint /*+ MERGE_JOIN(a, c) / or /+ TIDB_SMJ(a, c) */. Maybe you can use the table alias name

There are no matching table names for (A) in optimizer hint /*+ INL_JOIN(a) / or /+ TIDB_INLJ(a) */. Maybe you can use the table alias name

该hint都是直接拿官方的help中的hint语法去使用的应该没有写错语法,但是为什么总是提示失败,并且hint也不生效?

a c那是不是应该写表全名

你把别名都去掉试试,4.0的版本太老了,没法找环境复现
explain
SELECT /+HASH_JOIN(ODS.HIS_CUSTS,ODS.USERS)/
ODS.HIS_CUSTS.C_CODE,ODS.USERS.TYPES
FROM ODS.HIS_CUSTS
INNER JOIN ODS.USERS
WHERE ODS.HIS_CUSTS.C_CODE = ODS.USERS.U_CODE
AND ODS.HIS_CUSTS.TDATE = 20230525

A,C跨库了么,把库名加上试试

升高版本试试 :shushing_face:

用 MySQL 客户端执行,记得接 -c,有 warn 的话 show warnings; 看下结果。

之前遇到hint 没有生效的情况是:在服务器上执行未成功,但是在客户端执行生效,不知道你是否也是一样的问题