---
title: 优化器无法准确评估包含 LOB 列访问的 SQL 执行代价导致计划选错-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于优化器无法准确评估包含 LOB 列访问的 SQL 执行代价导致计划选错相关的常见问题和使用技巧，帮助您快速解决优化器无法准确评估包含 LOB 列访问的 SQL 执行代价导致计划选错的难题。
---
切换语言

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

划线反馈

# 优化器无法准确评估包含 LOB 列访问的 SQL 执行代价导致计划选错

更新时间：2026-07-06 08:36

适用版本： V4.0.x、V4.1.x、V4.2.x、V4.3.x、V4.4.x 内容类型：TechNote  

在数据库中 LOB（Large Object）类型是一种用于存储大容量数据的数据类型，通常用于存储文本、图像、音频、视频等非结构化数据。 当前 OceanBase 对于包含 LOB 列的查询 SQL，优化器不能准确的计算访问 LOB 列的代价，会导致计划代价计算和实际执行的时间不符或者是代价估计偏差大，从而导致基表计划选择不优的情况。 Oceanbase 当前包含的 LOB 类型，可参考 [LOB 类型](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000004481457)。

## 详细说明

LOB 字段的问题在于存储的数据量大小不一（根据 `ob_inrow_threshold` 的设置，查询 LOB 列字段，同时存在 OUTROW 访问的可能性），因此很难用一个有效的参数去描述。优化器只能给一个较大的评估值来避免差的计划。但是无法保证是当前数据下的最优计划。 如下面的查询中，可以看到查询包含 LOB 列的情况下，表 FULL SCAN 扫描的预估时间和实际执行时间相差很多（175747us vs 9886us）。 而当去掉 LOB 列，查询表 FULL SCAN 的时候，估算时间和预估时间比较接近。

**第一部分执行计划（存在 LOB ）：**

```sql
*************************** 1. row ***************************
dbms_xplan.display_cursor(0, 'all'): ====================================================================================================
|ID|OPERATOR          |NAME                     |EST.ROWS|EST.TIME(us)|REAL.ROWS|REAL.TIME(us)|IO TIME(us)|CPU TIME(us)|
-------------------------------------------------------------------------------------------------------------------------------
|0 |MERGE GROUP BY    |                         |1       |175764     |1        |9886       |0         |573        |
|1 |└─TABLE FULL SCAN |bfip_inventory_account   |878     |175747     |12121    |9886       |0         |10480      | <<----- 存在 LOB
===================================================================================================

```

**第二部分执行计划（去掉 LOB ）：**

```sql
dbms_xplan.display_cursor(0, 'all'): ====================================================================================================
|ID|OPERATOR           |NAME                                      |EST.ROWS|EST.TIME(us)|REAL.ROWS|REAL.TIME(us)|IO TIME(us)|CPU TIME(us)|
----------------------------------------------------------------------------------------------------------------------------------------
|0 |MERGE GROUP BY     |                                          |1       |28297      |1        |44378      |0         |389        |
|1 |└─TABLE RANGE SCAN |bfip_inventory_account(idx_bfip_inventory_account_6)|7103    |28168      |12121    |44378      |0         |43647      | <<----- 去掉 LOB
===================================================================================================

```

因此对于包含 LOB 列的查询，可以尽量找到合适的计划，绑定对应的计划。

## 适用版本

OceanBase 数据库 V4.x 版本。

上一篇

[SPM 基线自动清理说明](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000003982847)

下一篇

[公有云环境下，对 OceanBase 下面的内部表绑定计划报错 ERROR 1044(42000) : Access denied for user 'xxx'@'%' to database 'oceanbase'](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000003132421) ![有帮助](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) 咨询热线
