我有两个容器。两者是相同的。两者都是使用两个不同服务器上的相同docker-compose.yml
文件启动的。两者具有相同的数据。完全相同(一个在另一个中备份并恢复)。
然而,对于同一查询,我得到了不同的排序。
这是我的查询:
SELECT `i`.`Id`,
`i`.`Guid`,
`i`.`Key`,
`i`.`Name`,
`i`.`Order`,
`i`.`PartTypeId`,
`i`.`PartTypeKey`,
`i`.`SectionId`,
`i`.`SectionKey`
FROM `ItemPartViews` AS `i`
WHERE `i`.`SectionId` = 7
ORDER BY `i`.`Order`
Run Code Online (Sandbox Code Playgroud)
这些是结果的图像:
我不明白为什么我会得到不同的排序。任何解释表示赞赏。
J.D*_*.D. 11
为什么在两个相同的 MariaDB 实例中对相同数据进行相同查询时会得到不同的排序?
你正在田地里分类i.Order
。在您的数据示例屏幕截图中,该Order
列中的值都是相同的(它们都是0
)。这使得这是一种不确定性排序(伪随机)。
可以这样想,如果你有一盒 20 个红球,每个红球上都印有不同的形状,你告诉某人将它们从盒子里拿出来并按颜色对它们进行分类,那么它们是哪个球并不重要第一个放置的和最后放置的一个,因为它们的颜色都相同。如果您然后将它们全部放回盒子中,并要求另一个人做同样的事情(按颜色排序),他们放置球的顺序仍然无关紧要,并且可能会与第一个人所做的不同。
这就是这里发生的事情。当对非唯一字段进行排序时,它是一种不确定的排序,并且不能保证这些行实际返回的顺序。SQL 引擎中的一些因素决定了实际的顺序,但它也太重要了。复杂,知名度不够高,最重要的是,设计无法保证。
如果您将i.Id
或其他一些唯一字段添加到您的ORDER BY
子句中,那么您的行将始终以相同的顺序返回。因为按唯一字段排序是确定性的。
归档时间: |
|
查看次数: |
515 次 |
最近记录: |