---
title: IN 优化引入的正确性问题一-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 IN 优化引入的正确性问题一相关的常见问题和使用技巧，帮助您快速解决 IN 优化引入的正确性问题一的难题。
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# IN 优化引入的正确性问题一

更新时间：2026-05-15 09:06

适用版本： V3.2.x、V4.1.x 内容类型：Troubleshoot  

## 问题现象

存在 `(c1,c2)` 的索引，SQL 过滤条件中存在如下形式的过滤谓词 `(c1 in (?,?,?) or c1 in (?,?,?)) and c2 ...`。这个场景下 c2 上的谓词会丢失，导致执行结果出错。

**举例：** `(c1 in ('1','2') or c1 in ('2','3')) and c2 = '0';`。

![image](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/database/performance/20250106correctness-issues.png)

## 关键诊断信息

### 触发条件

存在 `(c1,c2)` 的索引，SQL 过滤条件中存在如下形式的过滤谓词 `(c1 in (?,?,?) or c1 in (?,?,?)) and c2 ...`。当使用这个索引时会出现问题。

### 事前巡检

检查是否存在上述形式的谓词和对应的索引。

### 事后诊断

explain 计划，检查生成的 range 中是否缺失了 C2 指定的值。

## 问题原因

IN 优化引入的 BUG。

## 问题的风险及影响

SQL 执行结果出错。

## 影响租户

影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。

## 影响版本

OceanBase 数据库企业版本 V3.2.3 BP6（oceanbase-3.2.3.3-106000102022111521）及之后版本、V3.2.4 GA（oceanbase-3.2.4.0-100000072022102819）及之后版本、V4.1.0 GA（oceanbase-4.1.0.0-100001122023040322）及之后版本。

## 解决方法

- 解决方法一：

  升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库企业版 V3.2.3 BP9（oceanbase-3.2.3.3-109000182023071410）及之后版本、V3.2.4 BP4（oceanbase-3.2.4.4-104000052023062021）及之后版本、V4.1.0 BP2（oceanbase-4.1.0.1-102000042023061309）及之后版本。
 - 解决方法二：

     1. 将 IN 表达式改成等价的 OR 表达式，例如 `c1 in ('1','2') => (c1 = '1' or c1 = '2')`。
     2. 通过 Hint 禁止走包含 IN 表达式所在列的索引，例如 `select /*+full(t1)*/...`。
     3. 在 IN 表达式后面加个 `is true`（适用于命中主键索引的场景），例如 `c1 in ('1','2') is true`。
     4. 如果出现问题的 OceanBase 数据库版本为以下版本或更高，可以通过隐藏配置项 `_enable_in_range_optimization` 关闭 IN 优化。

            - OceanBase 数据库企业版 V3.2.3 BP8 Hotfix5（oceanbase-3.2.3.3-108050012023070409）及之后版本。
            - OceanBase 数据库企业版 V3.2.4 BP4（oceanbase-3.2.4.4-104000052023062021）及之后版本。
            - OceanBase 数据库企业版 V4.1.0 BP2（oceanbase-4.1.0.1-102000042023061309）及之后版本。

## 规避方式

无。

## 相关文档

关于 IN 优化引入的其他正确性问题，参见：[IN 优化引入的正确性问题二](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000002081861?back=kb)、[IN 优化引入的正确性问题三](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000002081859?back=kb)、[IN 优化引入的正确性问题四](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000002081860?back=kb)。

上一篇

[执行计划跳变排查思路整理](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000001140811)

下一篇

[OceanBase 数据库执行计划生成模块使用内存过多](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000422801) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
