GROUPED 子句

仅限企业模式

将两个或多个列分组到单个磁盘文件。这样可以将以下工作负载的 I/O 降到最低:

  • 读取表中大部分的列。

  • 执行单个行查找。

  • 针对大量小型列进行查询。

  • 频繁更新这些列中的数据。

如果您具有始终同时访问的数据并且这些数据不会在谓词中使用,那么可以通过分组这些列来提高查询性能。一旦分组,查询将不再独立于组中的其他列从磁盘独立检索单个列的所有数据。

对列分组时,您可以:

  • 对部分列进行分组:

    (a, GROUPED(b, c), d)

  • 对所有列进行分组:

    (GROUPED(a, b, c, d))

  • 在同一投影中创建多个分组:

    (GROUPED(a, b), GROUPED(c, d))

对相关列进行分组

以下示例展示了如何对高度相关的列 bidask 进行分组。stock 列单独存储。

=> CREATE TABLE trades (stock CHAR(5), bid INT, ask INT);
=> CREATE PROJECTION tradeproj (stock ENCODING RLE,
   GROUPED(bid ENCODING DELTAVAL, ask))
   AS (SELECT * FROM trades) KSAFE 1;

以下示例展示了如何创建在列定义中使用表达式的投影。投射包含两个整数列 ab,以及第三列 product_value,用于存储 ab 的乘积:

=> CREATE TABLE values (a INT, b INT


=> CREATE PROJECTION product (a, b, product_value) AS
   SELECT a, b, a*b FROM values ORDER BY a KSAFE;