---
title: 开启表并行后，limit 失效，没有选择最优索引-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 开启表并行后，limit 失效，没有选择最优索引相关的常见问题和使用技巧，帮助您快速解决 开启表并行后，limit 失效，没有选择最优索引的难题。
---
切换语言

- 简体中文
- English

划线反馈

# 开启表并行后，limit 失效，没有选择最优索引

更新时间：2024-01-22 01:56

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

## 问题描述

OceanBase 数据库 V3.x 版本在 MySQL 模式下开启表并行功能，limit 算子无法下压至存储层。

1. 完整 SQL 如下。

   ![dada-dada-9009-opp](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/database/sql/20230906parallel01.png)
 2. 设置表级别并行度，SQL 中 limit 失效，导致性能崩溃。

   ```shell
   obclient [mysql]> ALTER TABLE order_loan_record PARALLEL 4;

   ```
 3. 未选择最优索引，走了一个代价极大的索引。

   ![yuu90--udiai-09-op](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/database/sql/20230906parallel02.png)
 4. SQL 语句中设置索引和并行度为 1 的 HINT 提示之后的执行计划。

   ![80iuoi-ioo-90op-iii0](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/database/sql/20230906parallel03.png)
 5. SQL 语句中不指定索引 HINT 提示，保留并行度为1的 HINT 提示，此时优化器默认选择执行计划。

   ![kjk8-9-ip9-908oiuo](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/database/sql/20230906parallel04.png)

## 适用版本

OceanBase 数据库 V2.x、V3.x 版本。

## 问题原因

OceanBase 数据库 Bug。存在多个全局索引时，全局索引带回表的场景估行存在问题，导致针对 `order by limit` 的查询，优化器在生成 order by 算子时因错误的代价估计直接裁掉了最佳索引（在生成 order by 算子后，分配 limit 算子有一个特殊的优化，从而再次选择最佳全局索引生成最优的执行计划。但优化器未考虑到这点，直接裁掉了最佳索引），从而无法选择到最优的全局索引上。

## 应急方法

使用 HINT 指定最佳索引。

Previous

[使用 sql_plan_monitor 与 monitor dump 诊断正确性问题](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000691119)

Next

[并行查询执行性能异常的场景之一](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000477361) ![有帮助](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) 咨询热线
