实例与数据引擎中集合关联
将 PostgreSQL 实例中的外部表与 SequoiaDB 中的集合空间、集合关联。
1)创建 employee 表;
1 | CREATE FOREIGN TABLE employee |
2)创建 employee2 表(把 pushdownsort 和 pushdownlimit 参数设置为关闭);
1 | CREATE FOREIGN TABLE employee2 |
3)创建 manager 表;
1 | CREATE FOREIGN TABLE manager |
4)更新表的统计信息;
1 | ANALYZE employee; |
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; |
操作截图:
从执行计划可以看出:
- 两个表的连接方式为 Nested Loop Join;
- “Foreign Namespace”, 表示查询涉及到的外部表分别映射到 SequoiaDB 巨杉数据库的 company.employee 和 company.manager 集合中;
- “Filter”,表示把 SQL 语句的查询条件转为 JavaScript 语法的查询条件。而最终,PostgreSQL 会把 JavaScript 语法的查询条件下压到 SequoiaDB 巨杉数据库对应的集合中执行;
2)在 PostgreSQL 中执行分页查询语句,并查看执行计划;
1 | EXPLAIN ANALYZE SELECT * FROM employee ORDER BY empno ASC LIMIT 5 OFFSET 0; |
操作截图:
对比以上两个外部表的执行计划,可以看到:
- employee 外部表的执行计划,PostgreSQL 把 limit、offset 和排序条件下压到 SequoiaDB 巨杉数据库中执行(分页和排序是在 SequoiaDB 巨杉数据库中完成),因为创建 employee 外部表时,没有指定 pushdownsort 和 pushdownlimit 参数,默认为开启。
- employee2 外部表的执行计划,PostgreSQL 没有把 limit、offset 和排序条件下压到 SequoiaDB 巨杉数据库中执行(由 PostgreSQL 完成分页和排序),因为创建 employee2 外部表时,设置了 pushdownsort 和 pushdownlimit 参数为关闭。
3)退出 PostgreSQL Shell;
1 | \q |