【问题标题】:select distinct performance is not consistentselect distinct 性能不一致
【发布时间】:2019-04-05 01:39:27
【问题描述】:

单个表上有一个不同的查询

select distinct d, e, f, a, b, c from t where a = 1 and e = 2;

列 a、b、c 中不同值的数量很高(高列基数),列 d、e、f 是低基数列。我的数据在 S3 中是 ORC 格式,我在 Athena 中有外部表和 Redshift 光谱指向同一个文件。

在 athena 中运行上述查询时,它会在几秒钟内返回,而在红移光谱中则需要几分钟。

但是当我将 col f 移到选择列表的末尾时,它在 Redshift 光谱中也可以正常工作。这只发生在这个特定的列上,我的意思是在最后移动 d 或 e 没有任何区别,即它们运行的​​时间更长。 col f 和其他列一样是 varchar 列,该列的最大长度为 30 个字节。

两个问题

  • (a) 任何关于将 col f 移动到列表末尾使其运行得更快而将其置于其间使其变慢的特殊行为的见解或指针

  • (b) 是否有推荐的 SQL 最佳实践在 distinct 或 group by 语句中按列基数的降序列出列?如果将较低基数的列放在最前面或混合排列,执行时间会有所不同吗?

【问题讨论】:

标签: sql amazon-redshift


【解决方案1】:

将您的 Redshift 驱动程序更新到最新版本通常可以使您的 Redshift Spectrum 速度几乎与 Athena 保持一致。

https://docs.aws.amazon.com/redshift/latest/mgmt/configure-jdbc-connection.html#download-jdbc-driver

这可能不是您用例中的原因,但绝对值得一试!

【讨论】:

  • 感谢 Jon,我正在使用最新的驱动程序,但这无济于事。即使使用本地红移表也面临这个问题,而不仅仅是红移光谱。
猜你喜欢
  • 2023-03-10
  • 2021-05-28
  • 2013-01-13
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多