【 TiDB 使用环境】生产环境
【 TiDB 版本】5.2.3
mysql客户端默认去掉注释的,你得加–comments
mysql> show warnings;
±--------±-----±---------------------------------------------------------------------------------+
| Level | Code | Message |
±--------±-----±---------------------------------------------------------------------------------+
| Warning | 1815 | Optimizer Hint /*+ INL_JOIN(t, t1) / or /+ TIDB_INLJ(t, t1) */ is inapplicable |
±--------±-----±---------------------------------------------------------------------------------+
1 row in set (0.00 sec)
INL_JOIN(t1)
这样试一下
查查表结构,字符集排序规则是不是一样的,关联字段是不是一样的,有没有对应的索引
这就是走index join了,为啥 t1.deleted=0 这个条件导致走不了index join,不清楚
t1.delete=0去掉 语义变了吧,除了join列排序规则要一致,不走index join 有可能 t1是估算数据不准确
等大佬解答
deleted=0的数据占总表百分之多少啊?
t1表deleted=1占全表接近100%
可以建一个 t1 (newHouseUuid,deleted )的联合索引试试看
联合索引还是不行。
t1.deleted字段是bit类型,t1.deleted改为tinyint类型之后,最终测试是index scan的,不清楚为何会这样
查表结构,再看SQL