0%

SequoiaDB-PostgreSql实例执行计划

实例与数据引擎中集合关联

将 PostgreSQL 实例中的外部表与 SequoiaDB 中的集合空间、集合关联。

1)创建 employee 表;

1
2
3
4
5
6
7
8
CREATE FOREIGN TABLE employee 
(
empno INT,
ename VARCHAR(128),
age INT
)
SERVER sdb_server
OPTIONS ( collectionspace 'company', collection 'employee', decimal 'on' );

2)创建 employee2 表(把 pushdownsort 和 pushdownlimit 参数设置为关闭);

1
2
3
4
5
6
7
8
CREATE FOREIGN TABLE employee2 
(
empno INT,
ename VARCHAR(128),
age INT
)
SERVER sdb_server
OPTIONS ( collectionspace 'company', collection 'employee', decimal 'on', pushdownsort 'off', pushdownlimit 'off' );

3)创建 manager 表;

1
2
3
4
5
6
7
CREATE FOREIGN TABLE manager 
(
empno INTEGER,
department TEXT
)
SERVER sdb_server
OPTIONS ( collectionspace 'company', collection 'manager', decimal 'on' );

4)更新表的统计信息;

1
2
3
ANALYZE employee;
ANALYZE employee2;
ANALYZE manager;

Note:

  • 集合空间与集合必须已经存在于 SequoiaDB,否则查询出错。
  • 如果需要对接 SequoiaDB 的 decimal 字段,则需要在 options 中指定 decimal ‘on’ 。
  • pushdownsort 设置是否下压排序条件到 SequoiaDB,默认为 on,关闭为 off。
  • pushdownlimit 设置是否下压 limit 和 offset 条件到 SequoiaDB,默认为 on,关闭为 off。
  • 开启 pushdownlimit 时,必须同时开启 pushdownsort,否则可能会造成结果非预期的问题。
  • 默认情况下,表的字段映射到 SequoiaDB 中为小写字符,如果强制指定字段为大写字符,创建方式参考“注意事项1”。
  • 映射 SequoiaDB 的数组类型,创建方式参考“注意事项2”。

PostgreSQL执行计划查看

1)在 PostgreSQL 中执行条件查询语句,并查看执行计划;

1
EXPLAIN ANALYZE SELECT * FROM employee a INNER JOIN manager b ON a.empno = b.empno WHERE a.empno = 1;

操作截图:

图片描述

从执行计划可以看出:

  1. 两个表的连接方式为 Nested Loop Join;
  2. “Foreign Namespace”, 表示查询涉及到的外部表分别映射到 SequoiaDB 巨杉数据库的 company.employee 和 company.manager 集合中;
  3. “Filter”,表示把 SQL 语句的查询条件转为 JavaScript 语法的查询条件。而最终,PostgreSQL 会把 JavaScript 语法的查询条件下压到 SequoiaDB 巨杉数据库对应的集合中执行;

2)在 PostgreSQL 中执行分页查询语句,并查看执行计划;

1
2
EXPLAIN ANALYZE SELECT * FROM employee ORDER BY empno ASC LIMIT 5 OFFSET 0;
EXPLAIN ANALYZE SELECT * FROM employee2 ORDER BY empno ASC LIMIT 5 OFFSET 0;

操作截图:

图片描述

对比以上两个外部表的执行计划,可以看到:

  1. employee 外部表的执行计划,PostgreSQL 把 limit、offset 和排序条件下压到 SequoiaDB 巨杉数据库中执行(分页和排序是在 SequoiaDB 巨杉数据库中完成),因为创建 employee 外部表时,没有指定 pushdownsort 和 pushdownlimit 参数,默认为开启。
  2. employee2 外部表的执行计划,PostgreSQL 没有把 limit、offset 和排序条件下压到 SequoiaDB 巨杉数据库中执行(由 PostgreSQL 完成分页和排序),因为创建 employee2 外部表时,设置了 pushdownsort 和 pushdownlimit 参数为关闭。

3)退出 PostgreSQL Shell;

1
\q
-------------本文结束感谢您的阅读-------------