更新时间:2025-05-29 GMT+08:00
Sort
算子说明
对底层节点返回的元组进行排序。Sort算子的作用是将查询结果按照指定的排序规则进行排序,然后返回有序的结果集。
典型场景
- 当查询语句中包含order by子句时,GaussDB会在执行计划中选择sort算子来进行排序操作。
- 采用MergeJoin来进行连接操作。
示例
示例:查询语句中包含ORDER BY子句。
--数据准备。 gaussdb=# CREATE TABLE student(id integer, class_id integer, grade number); CREATE TABLE gaussdb=# INSERT INTO student VALUES(generate_series(1,50), 1, floor(100 * random())); INSERT 0 50 gaussdb=# INSERT INTO student VALUES(generate_series(51,100), 2, floor(100 * random())); INSERT 0 50 gaussdb=# INSERT INTO student VALUES(generate_series(101,150), 3, floor(100 * random())); INSERT 0 50 gaussdb=# INSERT INTO student VALUES(generate_series(151,200), 3, floor(100 * random())); INSERT 0 50 --执行结果。 gaussdb=# EXPLAIN SELECT * FROM student ORDER BY grade; QUERY PLAN ---------------------------------------------------------------- Sort (cost=10.64..11.14 rows=200 width=12) Sort Key: grade -> Seq Scan on student (cost=0.00..3.00 rows=200 width=12) (3 rows) --删除。 gaussdb=# DROP TABLE student;
上述示例中,Sort算子输出信息如下所示。
信息名称 |
含义 |
---|---|
Sort |
算子的名称。 |
Sort Key |
Sort算子排序的依据关键字。示例中为grade。 |
示例:采用MergeJoin来进行连接操作。
--数据准备。 gaussdb=# DROP TABLE IF EXISTS t1; gaussdb=# DROP TABLE IF EXISTS t2; gaussdb=# CREATE TABLE t1(id int,info text); CREATE TABLE gaussdb=# CREATE TABLE t2(id int,info text); CREATE TABLE gaussdb=# CREATE INDEX t1_k on t1(id); CREATE INDEX gaussdb=# INSERT INTO t2 SELECT generate_series(1,100000),'bill'||generate_series(1,100000); INSERT 0 100000 gaussdb=# INSERT INTO t1 SELECT generate_series(1,100000),'bill'||generate_series(1,100000); INSERT 0 100000 --收集统计信息。 gaussdb=# ANALYZE t1; gaussdb=# ANALYZE t2; --执行结果。 gaussdb=# EXPLAIN SELECT /*+ MERGEJOIN(t2 t1) */ * FROM t2 JOIN t1 ON (t1.id=t2.id); QUERY PLAN ------------------------------------------------------------------------------ Merge Join (cost=9710.87..14918.02 rows=100000 width=26) Merge Cond: (t1.id = t2.id) -> Index Scan using t1_k on t1 (cost=0.00..3457.25 rows=100000 width=13) -> Sort (cost=9710.82..9960.82 rows=100000 width=13) Sort Key: t2.id -> Seq Scan on t2 (cost=0.00..1406.00 rows=100000 width=13) (6 rows) --删除。 gaussdb=# DROP TABLE t1,t2;
父主题: 运算符