sql中使用in子查询效率比exists差很多

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:v3.0.11
  • 【问题描述】:

表有48个字段,索引12个,一半是组合索引,记录数7500W+,语句用到的字段及索引截取信息如下:

CREATE TABLE `a` (
  `id` bigint(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  ... ...
  `created_at` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `userId` (`user_id`),
  KEY `idx_to_createdat` (`created_at`),
  ... ...
) ENGINE=InnoDB DEFAULT CHARSET=utf8

以下两个SQL是等价的,一个使用in,一个使用exists,in里面的记录数在100条左右,子查询中的表 t 与 原表 a 是同一张表,起的不同别名

表 a 也手工执行过analyze table,统计信息应该没问题。是不是tidb对in的优化有点问题啊?

in 查询在不断的优化中,这个问题我们也会继续分析下,多谢