【问题标题】:Redshift select * vs select single columnRedshift select * vs 选择单列
【发布时间】:2016-02-09 19:23:17
【问题描述】:

我遇到以下 Redshift 性能问题:

我有一个大约 20 亿行的表,其中有大约 100 个 varchar 列和一个 int8 列 (intCol)。该表相对稀疏,尽管每行都有一些列。

以下查询:

select colA from tableA where intCol = ‘111111’;

返回大约 30 行,运行速度相对较快(约 2 分钟)

但是,查询:

select * from tableA where intCol = ‘111111’;

花费不确定的时间(60 分钟后放弃)。

我知道修剪投影中的列通常会更好,但此应用程序需要整行。

问题:
这只是在 Redshift 中做的一件根本上的坏事吗? 如果不是,为什么这个特定的查询要花这么长时间?它是否与表格的结构有关?是否有一些 Redshift 旋钮可以调整以使其更快?我还没有弄乱桌子上的 distkey 和 sortkey,但不清楚这些在这种情况下是否重要。

【问题讨论】:

  • 将所有数据放在一张表中是根本错误的
  • intCol 是否已编入索引?尝试删除撇号。有键列吗?

标签: database-performance amazon-redshift


【解决方案1】:

第一次查询比较快的主要原因是因为 Redshift 是一个列式数据库。柱状数据库 按列存储表数据,将同一列数据写入存储上的同一块。这种行为不同于 MySQL 或 PostgreSQL 等基于行的数据库。基于此,由于第一个查询只选择 colA 列,Redshift 根本不需要访问其他列,而第二个查询访问所有列,导致磁盘访问量很大。

为了提高第二个查询的性能,您可能需要将“sortkey”设置为 colA 列。通过将 sortkey 设置为列,该列数据将按排序顺序存储在存储中。在获取包含该列的条件的记录时,它降低了磁盘访问的成本。

【讨论】:

    猜你喜欢
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 2019-10-28
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多