在红移和MySql中选择*vs选择列

在红移和MySql中选择*vs选择列,mysql,performance,bigdata,amazon-redshift,rdbms,Mysql,Performance,Bigdata,Amazon Redshift,Rdbms,如果我只需要2/3列,我查询SELECT*,而不是在selectquery中提供这些列,那么红移和MySql中的I/O或内存的增加/减少是否会导致性能下降 基本上我想了解比较Redshift和MySql中的select*和select column,哪个数据库的查询速度更快,为什么???,因为Redshift是柱状数据库 从表a中选择第1列,第2列,其中包含一些标准 特定列选择查询将是超快速的,因为红移只需要扫描/读取特定列 而Select*会慢得多,因为红移需要扫描和读取所有列 对于MySql

如果我只需要2/3列,我查询
SELECT*
,而不是在selectquery中提供这些列,那么红移和MySql中的I/O或内存的增加/减少是否会导致性能下降


基本上我想了解比较Redshift和MySql中的
select*
select column
,哪个数据库的查询速度更快,为什么???

,因为Redshift是柱状数据库

从表a中选择第1列,第2列,其中包含一些标准

特定列选择查询将是超快速的,因为红移只需要扫描/读取特定列

而Select*会慢得多,因为红移需要扫描和读取所有列

对于MySql,也可以选择col1,表a中的col2可以(作为更少的内存/IO),但不如红移

我建议您阅读一些关于列式数据库的非常好的文档,比如Redshift,它的分发密钥概念和编码概念,同时也会对性能产生很大的影响


对于MySQL,可能有一个小的或大的差异:

  • 大:如果
    *
    文本
    BLOB
    列,但在2/3中不存在。这是因为,在某些情况下,这样的字段需要额外的磁盘命中才能获取
  • 否则就小了。(更多的要解析,更多的要分配内存等)

这里有很多问题(I/O、内存、速度)。你自己试过或描述过什么吗?不过,您肯定有一个正确的预感,因为红移存储通常是柱状的。事实上,研究人员说:“通过以压缩、分区、列数据格式存储数据,可以提高查询性能并降低成本……如果以列格式存储数据,如拼花地板或ORC,由于红移光谱仅扫描查询所需的列,您的费用也将下降。”我希望两者都有相同的执行计划,因此在DB本身上,性能应该相当相似。另一方面,如果
select*
会导致发送的数据比只在少数列上选择要多得多,那么从网络带宽的角度来看,前者的性能会更低@TimBiegeleisen@RayToal感谢您的回复,我知道SELECT*总是很昂贵,因为它需要更多的I/O、内存、,处理更多的数据等,但基本上我想了解列数据库和行数据库中查询执行的差异。你可能没有理解我评论的要点。我试图告诉您,两个查询的执行策略可能是相同的。但是,如果您想要更多的列,那么肯定会有性能差异,特别是如果额外的列特别大的话。始终只选择您真正想要返回的列,即使这些列都是。不要使用邪恶选择*。