【发布时间】:2018-10-16 20:53:18
【问题描述】:
如果我只需要 2/3 列并查询 SELECT * 而不是在选择查询中提供这些列,那么 Redshift 和 MySql 中的更多/更少 I/O 或内存是否会导致性能下降?
基本上我想了解在 Redshift 和 MySql 中比较 select * 和 select column 在哪个数据库中哪个查询更快,为什么??
【问题讨论】:
-
这里有很多问题(I/O、内存、速度)。您自己尝试过或分析过任何东西吗?不过,您肯定有一个正确的预感,因为 RedShift 存储通常是柱状的。事实上,RedShift docs 是这样说的:“您可以通过以压缩的、分区的、列式数据格式存储数据来提高查询性能并降低成本……如果您以 Parquet 或 ORC 等列式格式存储数据,您的由于 Redshift Spectrum 仅扫描查询所需的列,费用也会下降。”
-
我希望两者具有相同的执行计划,因此在数据库本身上,性能应该非常相似。另一方面,如果
select *与仅在几列上进行选择相比,会导致发送更多的数据,那么从网络带宽的角度来看,前者的性能会更低。 -
@TimBiegeleisen@RayToal 感谢您的回复,我知道 SELECT * 总是很昂贵,因为它需要更多的 I/O、内存、处理更多的数据等,但基本上我想了解不同的查询执行在列数据库和行数据库中。
-
你可能错过了我评论的重点。我想告诉你,这两个查询的执行策略可能是相同的。但是,如果您想要更多的列,那么肯定会存在性能差异,尤其是在额外的列特别大的情况下。
-
总是只选择你真正想要返回的列——即使那是全部。不要使用邪恶的 SELECT *。
标签: mysql performance bigdata amazon-redshift rdbms