tidb v4.0.9中的join通过hints不能改变驱动表的顺序

【 TiDB 使用环境】生产环境

【概述】 场景 + 问题概述
tidb v4.0.9中有两张表进行join,两张表的大小分别为30w(trade_retail_bill)和70w(trade_retail_bill_line),在做join的时候总是大表被作为驱动 表,通过straight_join没有边改顺序,通过INL_join(trade_retail_bill)暗示后改变了join的顺序,但是返回的值却是以大表做为基准的。

=====原始执行计划

===通过straight_join

==添加hints之后的执行计划

【问题】 当前遇到的问题

【业务影响】 两个表join,返回的数据都是以大表作为驱动表返回的数据,数据量很大

【TiDB 版本】 V4.0.9

用hint hash join试试

和,1,2两种状态一样。

两张表已经做过analyze

查看了两张表的健康状态,一个是99,一个是97,感觉还可以呀。

方便贴下SQL 表结构不

==表结构
CREATE TABLE trade_retail_bill (
id bigint(20) NOT NULL,
bill_no varchar(32) COLLATE utf8_general_ci DEFAULT NULL ,
bill_status varchar(2) COLLATE utf8_general_ci DEFAULT NULL,
****
PRIMARY KEY (id),
UNIQUE KEY bill_no (bill_no),
KEY idx_retail_bill_no (bill_no)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci

CREATE TABLE trade_retail_bill_line (
id bigint(20) NOT NULL,
bill_id bigint(20) DEFAULT NULL ,
*****
PRIMARY KEY (id),
KEY idx_retail_line_sku_id (sku_id),
KEY idx_retail_line_goods_id (goods_id),
KEY idx_retail_line_bill_id (bill_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci

==查询语句
SELECT *****
FROM
“trade_retail_bill” “trade_retail_bill”,
“trade_retail_bill_line” “trade_retail_bill_line”
WHERE
“trade_retail_bill”.“bill_status” IN (‘05’)
AND (
“trade_retail_bill”.“id” = “trade_retail_bill_line”.“bill_id”
);

new_collations_enabled_on_first_bootstrap 这个参数设置的啥

true

https://github.com/pingcap/tidb/issues/23032 应该是这个bug,看影响版本范围得4.0.12后解决

我看那个bug指的好像是text类型的,当时我的关联键是bigint类型。