---
title: "SORT | OceanBase 文档中心"
description: SORT SORT 算子用于对输入的数据进行排序。 示例：对 t1 表的数据排序，并按照 c1 列降序排列和 c2 列升序排列 obclient&gt; CREATE TABLE t1(c1 INT, c2 INT); Query OK, 0 rows affected obclient&gt; CREATE INDEX i1 …
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

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

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

# SORT

更新时间：2023-07-18 17:25:59

`SORT` 算子用于对输入的数据进行排序。

示例：对 `t1` 表的数据排序，并按照 `c1` 列降序排列和 `c2` 列升序排列

```sql
obclient> CREATE TABLE t1(c1 INT, c2 INT);
Query OK, 0 rows affected

obclient> CREATE INDEX i1 ON t1(c1);
Query OK, 0 rows affected

obclient> EXPLAIN SELECT c1 FROM t1 ORDER BY c1 DESC, c2 ASC\G;
*************************** 1. row ***************************

Query Plan:
================================================
|ID|OPERATOR   |NAME          |EST. ROWS|COST  |
------------------------------------------------
|0 |SORT       |              |100000   |563390|
|1 | TABLE SCAN|T1(I1,Reverse)|100000   |385811|
================================================

Outputs & filters:
-------------------------------------
  0 - output([T1.C1]), filter(nil), sort_keys([T1.C1, DESC], [T1.C2, ASC]), prefix_pos(1)
  1 - output([T1.C1], [T1.C2]), filter(nil),
      access([T1.C1], [T1.C2]), partitions(p0)

1 row in set

```

上述示例中，执行计划展示中 0 号算子 `SORT` 对 `t1` 表的数据进行排序，执行计划展示中的 `outputs & filters` 详细展示了 `SORT` 算子的输出信息如下：

| **信息名称** | **含义** |
| --- | --- |
| output | 该算子的输出列。 |
| filter | 该算子的过滤谓词。 由于示例中 `SORT` 算子没有设置 `filter`，所以为 `nil`。 |
| sort_keys([column, DESC],[column, ASC] ...) | 按 `column` 列排序。   - `DESC`：降序排列。 - `ASC`：升序排列。  例如，`sort_keys([t1.c1, DESC],[t1.c2, ASC])` 中指定排序键分别为 `c1` 列和 `c2` 列，并且以 `c1` 列降序, `c2` 列升序排列。 |
| prefix_pos(n) | 排序列的有序位置。 例如，`sort_keys([t1.c1, DESC], [t1.c2, ASC]),prefix_pos(1)` 表示 `t1` 表的数据在 `c1` 列上有序，仅需要对 `c2` 列排序。 |

如果 `ORDER BY` 语句块后面还有 `LIMIT`（仅适用于 MySQL 模式）语句，优化器会进一步优化执行计划，生成 `TOP-N SORT`算子，即采用堆排序来选择 TOP-N 的数据，示例如下：

```sql
obclient> EXPLAIN SELECT * FROM t1 WHERE c1 > 1 ORDER BY c1,c2 LIMIT 10\G
*************************** 1. row ***************************
Query Plan:
========================================
|ID|OPERATOR    |NAME  |EST. ROWS|COST |
----------------------------------------
|0 |LIMIT       |      |10       |42432|
|1 | TOP-N SORT |      |10       |42431|
|2 |  TABLE SCAN|t1(i1)|10000    |41764|
========================================

Outputs & filters:
-------------------------------------
  0 - output([t1.c1], [t1.c2]), filter(nil), limit(10), offset(nil)
  1 - output([t1.c1], [t1.c2]), filter(nil), sort_keys([t1.c1, ASC], [t1.c2, ASC]), topn(10), prefix_pos(1)
  2 - output([t1.c1], [t1.c2]), filter(nil),
      access([t1.c1], [t1.c2]), partitions(p0)

```

上述示例的执行计划展示中，`topn(10)` 表示 `LIMIT 10` 需要的数据量。

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