---
title: 相同 SQL 生成不同 SQL_ID，未命中执行计划的原因和解决方法-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 相同 SQL 生成不同 SQL_ID，未命中执行计划的原因和解决方法相关的常见问题和使用技巧，帮助您快速解决 相同 SQL 生成不同 SQL_ID，未命中执行计划的原因和解决方法的难题。
---
切换语言

- 简体中文
- English

划线反馈

# 相同 SQL 生成不同 SQL_ID，未命中执行计划的原因和解决方法

更新时间：2025-06-12 08:36

适用版本： V1.4.x、V2.1.x、V2.2.x、V3.1.x、V3.2.x、V4.0.x、V4.1.x、V4.2.x、V4.3.x 内容类型：Troubleshoot  

## 问题现象

SQL 执行慢，每条 SQL 都执行了硬解析，从 `gv$ob_sql_audit` 中查看执行记录，发现每条 SQL 的 `SQL_ID` 都不一样，并且未命中执行计划。

![image01](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/database/performance/20250612the-same-sql-generates-different-sqlids-execution-plan-not-hit01.png)

## 问题原因

1. 错误设置 `cursor_sharing`（用于判断处理 SQL 时是否进行参数化）变量为 `EXACT`，导致每次 SQL 都不做参数化。
 2. ps 语法，SQL 未进行参数化，导致每次都硬解析。

代码中使用了 ps 语法，并且直接拼接了 SQL，并未用参数模版的方式（`cursor_sharing` 设置为 `EXACT`），导致传入的 SQL 无法参数化，本地测试如下图所示。

![image02](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/database/performance/20250612the-same-sql-generates-different-sqlids-execution-plan-not-hit02.png)

可以看到每次 `SQL_ID` 不同，并且 `IS_HIT_PLAN` 字段都为 0，如下图所示。

![image03](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/database/performance/20250612the-same-sql-generates-different-sqlids-execution-plan-not-hit03.png)

## 影响版本

OceanBase 数据库所有版本。

## 解决方法

SQL 使用参数化模版，即设置 `cursor_sharing` 为默认值 `FORCE`。

Previous

[使用临时表导致系统登录慢的问题](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000207682)

Next

[判定大查询导致第二次执行慢的问题](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000194267) ![有帮助](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) 咨询热线
