---
title: "range_index_dive_limit - OceanBase 数据库 V4.2.1 | OceanBase 文档中心"
description: range_index_dive_limit 说明 在 V4.2.x 版本中，该变量从 V4.2.5、V4.2.1 BP9 版本引入。 功能描述 range_index_dive_limit 用于指示优化器使用存储层估行时的 range 数量限制。 权限要求 查询变量 Global 级别 sys 租户和所有用户租户均…
---
切换语言

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

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.2.1 LTS

# range_index_dive_limit

更新时间：2026-07-13 22:32:57

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.2.1/zh-CN/700.reference/800.configuration-items-and-system-variables/200.system-variable/300.global-system-variable/11110.range_index_dev_limit.md)

#### 说明

在 V4.2.x 版本中，该变量从 V4.2.5、V4.2.1 BP9 版本引入。

## 功能描述

`range_index_dive_limit` 用于指示优化器使用存储层估行时的 range 数量限制。

## 权限要求

- 查询变量
     - Global 级别 sys 租户和所有用户租户均可以使用 `SHOW VARIABLES` 语句或视图 `SYS.TENANT_VIRTUAL_GLOBAL_VARIABLE`（Oracle 模式）及视图 `information_schema.GLOBAL_VARIABLES`（MySQL 模式）查看 Global 系统变量的值。
     - Session 级别 sys 租户和所有用户租户均可以使用 `SHOW VARIABLES` 语句或视图 `SYS.TENANT_VIRTUAL_SESSION_VARIABLE`（Oracle 模式）及视图 `information_schema.SESSION_VARIABLES`（MySQL 模式）查看 Session 系统变量的值。
 - 修改变量
     - Global 生效
           - sys 租户可以直接修改 Global 系统变量的值。
           - MySQL 用户租户需要拥有 `SUPER` 或 `ALTER SYSTEM` 权限才能修改 Global 系统变量的值。
           - 对于 V4.x 版本，从 V4.2.0 版本开始，Oracle 用户租户需要拥有 `ALTER SYSTEM` 权限才能修改 Global 系统变量的值。
     - Session 生效 sys 租户和所有用户租户均可以直接修改本租户的 Session 系统变量的值。

## 属性说明

| **属性** | **描述** |
| --- | --- |
| 参数类型 | int |
| 默认值 | 10 |
| 取值范围 | [0, INT64_MAX]   #### 说明    其中：    - `0` 表示不设限。但允许设置为负数，含义与 `0` 相同。 - `INT64_MAX` 代表的是 64 位有符号整数类型的最大值。 |
| 生效范围 | Global/Session |
| 是否可修改 | 是 |

## 使用说明

修改该变量以控制优化器存储层估行时的 range 数量限制：

- 当 range 个数小于该变量时，总是选择所有 range 做存储层估行。
 - 当 range 个数大于等于该变量时，随机选择 `range_index_dive_limit` 个 range 进行存储层估行，并将估行结果等比例放大。
 - 当该变量为 0 时，总是选择所有 range 做存储层估行。
 - 当 `range_index_dive_limit` 与 `partition_index_dive_limit` 同为负数时，存储层估行策略回滚到旧版本，仅对单分区 10 个 range 以内做存储层估行。

## 配置示例

1. 创建表并插入数据。

   ```shell
   obclient> CREATE TABLE t1(c1 int, c2 int, index i1(c1));
   Query OK, 0 rows affected (0.173 sec)

   obclient> INSERT INTO t1 SELECT 1,1 FROM table(generator(10));
   Query OK, 10 rows affected (0.003 sec)
   Records: 10  Duplicates: 0  Warnings: 0

   obclient> INSERT INTO t1 SELECT 2,2 FROM table(generator(20));
   Query OK, 20 rows affected (0.001 sec)
   Records: 20  Duplicates: 0  Warnings: 0

   obclient> INSERT INTO t1 SELECT 3,3 FROM table(generator(30));
   Query OK, 30 rows affected (0.001 sec)
   Records: 30  Duplicates: 0  Warnings: 0

   ```
 2. 查看执行计划，默认场景，不超过 10 个 range 均采用存储层估行。

   ```shell
   obclient> EXPLAIN SELECT c1 FROM t1 WHERE c1 in (1,2,3);
   +---------------------------------------------------------------------------------------------------------+
   | Query Plan                                                                                              |
   +---------------------------------------------------------------------------------------------------------+
   | ==================================================                                                      |
   | |ID|OPERATOR        |NAME  |EST.ROWS|EST.TIME(us)|                                                      |
   | --------------------------------------------------                                                      |
   | |0 |TABLE RANGE SCAN|t1(i1)|60      |11          |                                                      |
   | ==================================================                                                      |
   | Outputs & filters:                                                                                      |
   | -------------------------------------                                                                   |
   |   0 - output([t1.c1]), filter(nil), rowset=256                                                          |
   |       access([t1.c1]), partitions(p0)                                                                   |
   |       is_index_back=false, is_global_index=false,                                                       |
   |       range_key([t1.c1], [t1.__pk_increment]), range(1,MIN ; 1,MAX), (2,MIN ; 2,MAX), (3,MIN ; 3,MAX),  |
   |       range_cond([t1.c1 IN (1, 2, 3)])                                                                  |
   +---------------------------------------------------------------------------------------------------------+
   12 rows in set (0.008 sec)

   ```
 3. 修改变量，仅选择 1 个 range 做存储层估行。

   ```shell
   obclient> SET range_index_dive_limit = 1;
   Query OK, 0 rows affected (0.001 sec)

   ```
 4. 查看执行计划，发现仅选择了第三个 range (3, MIN; 3, MAX) 做存储层估行，估行结果为 `30 * 3 = 90`。

   ```shell
   obclient> EXPLAIN SELECT c1 FROM t1 WHERE c1 in (1,2,3);
   +---------------------------------------------------------------------------------------------------------+
   | Query Plan                                                                                              |
   +---------------------------------------------------------------------------------------------------------+
   | ==================================================                                                      |
   | |ID|OPERATOR        |NAME  |EST.ROWS|EST.TIME(us)|                                                      |
   | --------------------------------------------------                                                      |
   | |0 |TABLE RANGE SCAN|t1(i1)|90      |12          |                                                      |
   | ==================================================                                                      |
   | Outputs & filters:                                                                                      |
   | -------------------------------------                                                                   |
   |   0 - output([t1.c1]), filter(nil), rowset=256                                                          |
   |       access([t1.c1]), partitions(p0)                                                                   |
   |       is_index_back=false, is_global_index=false,                                                       |
   |       range_key([t1.c1], [t1.__pk_increment]), range(1,MIN ; 1,MAX), (2,MIN ; 2,MAX), (3,MIN ; 3,MAX),  |
   |       range_cond([t1.c1 IN (1, 2, 3)])                                                                  |
   +---------------------------------------------------------------------------------------------------------+
   12 rows in set (0.003 sec)

   ```

## 相关文档

[partition_index_dive_limit](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001417424)

 上一篇 下一篇 ![有帮助](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) 咨询热线
