---
title: SQL_ID, Plan_ID 与 Plan_hash-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 SQL_ID, Plan_ID 与 Plan_hash相关的常见问题和使用技巧，帮助您快速解决 SQL_ID, Plan_ID 与 Plan_hash的难题。
---
切换语言

- 简体中文
- English

划线反馈

# SQL_ID, Plan_ID 与 Plan_hash

更新时间：2026-05-14 09:21

适用版本： V2.1.x、V2.2.x、V3.1.x、V3.2.x 内容类型：TechNote  

在 OceanBase 数据库中，SQL_ID 是参数化后的 SQL statement 对应的 MD5 值。相同的 SQL statement 在所有 OBServer 中对应同一个 SQL_ID。Plan_ID 在单个 OBServer 中唯一，同一条 SQL 在不同 OBServer 中的相同的 Plan 对应不同的 plan_id，而 plan_hash 相同。

## 适用版本

OceanBase 数据库 V4.0 以前的所有版本。

## SQL_ID

SQL_ID 用于唯一确定一个查询语句，它是由查询语句经过快速参数化后得到的字符串的 MD5 值，返回 128 位的哈希值。SQL_ID 的长度为 CHAR(32)，形如 ED570339F2C856BA96008A29EDF04C74。

相同文本的 SQL 的 SQL_ID 总是相同的，可以通过以下脚本生成对应 SQL 的 sql_id。

```
import hashlib
sql_text='SELECT * FROM t1 WHERE c2 = ?'
sql_id=hashlib.md5(sql_text.encode('utf-8')).hexdigest().upper()
print(sql_id)

```

可以在以下网页在线执行 Python 脚本生成 SQL_ID：https://c.runoob.com/compile/9/。

![sql-id](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/database/sql/imgrVe8JuKUUS.png)

## Plan_ID

Plan_ID 用于在单个 OBServer 上唯一确定 plan_cache 中的一个plan，plan_id 是 OBServer 启动后通过一个本地范围内的自增序列产生的值，OBServer 重启后，plan_id 会重置。

Plan cache 是租户间隔离的，在一台 OBServer 中，plan_id 和 tenant_id 一起决定一个执行计划。

## Plan_hash

Plan_hash 是对执行计划（plan）进行 hash 运算得到的值。理论上，相同的执行计划对应相同的 plan_hash，同一条 SQL 在不同 OBServer 中生成相同的执行计划，plan_id 不同，而 plan_hash 相同。

Previous

[如何开启 OceanBase 数据库 MySQL 模式中的 SQL TRACE](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000001022)

Next

[OceanBase 的 TRACE EVENT 是如何采集和实现的](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000284456) ![有帮助](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) 咨询热线
