请问子查询形成表的hint怎么写?

tidb版本:v6.5.3
现象:
大概语句如下

select q.a,q,b from (
select  a,b from table1 partition(p0520) where c >100 group by a,b) as n join table1 partition(p0520)  q on  n.a=q.a group by a,b;

默认执行计划是n和q 表走了个index hash join,我想让n 和 q 走个hash join ,我加的hint如下

select /*+hash_join_build(@qb1) */  q.a,q,b from (
select /*+ qb_name(qb1) */ a,b from table1 partition(p0520) where c >100 group by a,b) as n join table1 partition(p0520)  q on  n.a=q.a group by a,b;

发现这样的hint无法让语句走hash join,求助一下,上述语句怎么才能让走hash join

select /*+hash_join_build(@qb1) / q.a,q,b from (
select /
+ qb_name(qb1) */ a,b from table1 partition(p0520) where c >100 group by a,b) as n join table1 partition(p0520) q on n.a=q.a group by a,b;

和select /*+hash_join_build(@qb1) */ q.a,-------->q,b <-----from ( 和这个位置符号错了有关系吗

q,b这里只是我写错了,就是q.b

https://docs.pingcap.com/zh/tidb/stable/optimizer-hints#no_index_hash_joint1_name--tl_name-

试试这个。
但是一般来说index hash join比hash join效率要高一些。
我感觉优化器没选错。用hash join可能会慢一些。

谢谢,这可能只是一种绕过的方法

应该是bug来着,6.5.6以上的版本应该修复了

也可以通过下面这种方式绕一下

select /*+hash_join_probe(q) */  q.a,q.b from (
select  a,b from table1 partition(p0520) where c >100 group by a,b) as n join table1 partition(p0520)  q on  n.a=q.a group by a,b;
SELECT /*+ TIDB_HINT('hint_name') */ ... FROM (
    SELECT ...
    FROM table
    WHERE condition
) AS sub_table;

在这个例子中,/*+ TIDB_HINT('hint_name') */ 是添加的Hint,hint_name 是你想要使用的Hint的名称。然而,具体的Hint名称和用法取决于TiDB的版本和它所支持的Hint类型。

加号后面少写了一个空格?/*+ hash_join_build(@qb1) */