cast转换没法正常走索引

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】
centos

【概述】 场景 + 问题概述
cast转换无法正常走索引
【背景】 做过哪些操作

【现象】 业务和数据库现象

【问题】 当前遇到的问题,参考 AskTUG 的 Troubleshooting 读性能慢-慢语句

【统计信息是否最新】

    【执行计划内容】

    【 SQL 文本、schema 以及 数据分布】

【业务影响】
导致tp业务很慢
【TiDB 版本】
v4.0.13
【附件】 相关日志及监控(https://metricstool.pingcap.com/)

  • TiUP Cluster Display 信息
  • TiUP CLuster Edit config 信息
  • TiDB-Overview Grafana监控
  • TiDB Grafana 监控
  • TiKV Grafana 监控
  • PD Grafana 监控
  • 对应模块日志(包含问题前后 1 小时日志)

建表:
CREATE TABLE test_1 (
id varchar(100) COLLATE utf8mb4_general_ci NOT NULL COMMENT ‘PK’,
abc varchar(100) COLLATE utf8mb4_general_ci DEFAULT ‘’,
PRIMARY KEY (id),
KEY idx_abc (abc)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

查询情况如下:

1 个赞

abc字段的内容保持在18位以上:
explain analyze select * from test_1 where abc=‘7*****************32’;

explain analyze select * from test_1 where abc=7*****************32;

explain analyze select * from test_1 where abc=cast(7*****************32 as char);

1 个赞

真的哎,第2句和第3句是没有走索引

1 个赞

这种写法可以命中索引
explain analyze select * from test_1 where abc=(SELECT cast(71234567890123456732 AS char));
explain analyze select * from test_1 where abc=CONCAT(71234567890123456732,’’); #注意是’‘不是’ ',中间没有空格

4 个赞

官方大佬看看是不是bug

这里没有大佬,只有表妹 @Billmay表妹

1 个赞

要转到 产品缺陷的list 里面去吗?
我把链接发给大佬们看看~

1 个赞

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。