SELECT * query (no ORDER BY)
如果使用相同的 DBMS 作为 Metastore ,a 的结果顺序是否可能始终相同?
因此,只要 MySQL 用作 Metastore,SELECT *;
查询结果的顺序将始终相同。如果使用 Postgres,相同数据上的顺序将始终相同,但与使用 MySQL 时不同。我说的是相同的数据。
也许这一切都归结为结果的默认顺序是什么以及为什么 MySQL 和 Postgres Metastore 不同的问题。
SELECT * query (no ORDER BY)
如果使用相同的 DBMS 作为 Metastore ,a 的结果顺序是否可能始终相同?
因此,只要 MySQL 用作 Metastore,SELECT *;
查询结果的顺序将始终相同。如果使用 Postgres,相同数据上的顺序将始终相同,但与使用 MySQL 时不同。我说的是相同的数据。
也许这一切都归结为结果的默认顺序是什么以及为什么 MySQL 和 Postgres Metastore 不同的问题。
没有默认的行顺序,没有ORDER BY
顺序是不能保证的。这个事实与所使用的 Metastore 数据库无关。
通常,许多进程(映射器)并行读取数据,计算拆分后,每个进程开始读取一些文件或少数文件,具体取决于计算的拆分。所有的并行进程可以处理不同的数据量,运行在不同的节点上,每次的负载不一样,所以它们在不同的时间开始返回行和结束,这取决于太多的因素,比如节点负载、网络负载、体积每个进程的数据量等。去除所有这些因素,您可以提高订单预测的准确性。比如说,单线程顺序文件读取将以与文件中相同的顺序返回行。但这不是数据库的工作方式。
同样根据 Codd 的关系理论,列和行的顺序对数据库来说并不重要。