提问人:gus 提问时间:6/13/2023 最后编辑:gus 更新时间:6/13/2023 访问量:87
我可以得到一个有几列但仍然确定的 ORDER BY 吗?
Can I get an ORDER BY with several columns but still deterministic?
问:
我知道确定性是当你按列排序时,1)这是真的吗?ORDER BY
UNIQUE INDEX
我想按列和 .name
percentage
有可能 2 个或更多学生具有相同的名字
和相同的百分比
,因此,在这种情况下,这将是不确定的,因为会定义哪个放在第一位,哪个放在后面(不是我),2) 这是真的吗?ORDER BY
MySQL
所以,我的第三个问题是(主要问题),如果我想按几列排序,但仍然有一个确定性的顺序,我应该在所有列的末尾使用一列,例如UNIQUE INDEX
ORDER BY name, percentage, id
?
考虑到id
primary key
我仍然不知道我是否正确理解了确定性和非确定性。
答:
3赞
Barmar
6/13/2023
#1
- 不一定。如果结果在列中不包含任何重复项,则顺序将是确定的。
ORDER BY
- 是的,如果存在重复项,则结果是不确定的。
- 是的,向 添加一个唯一的列可以确定它。
ORDER BY
这是否重要取决于您的应用程序。
如果您正在执行基于查询的复制,并且使用 .如果没有确定性排序,主副本和副本之间的 ID 可能会不一致。INSERT INTO table SELECT ...
AUTO_INCREMENT
评论
0赞
gus
6/13/2023
"这是否重要取决于您的应用程序。- 好的,我需要一个 HTML 视图来显示查询的行(分页器),所以我认为顺序必须是确定性的才能有一致的页面,对吧?@Barmar
1赞
Barmar
6/13/2023
是的。尽管如果在分页时更改表,您仍然会遇到不一致的情况。当您在 Stack Exchange 中翻页“热点问题”页面时,就会发生这种情况。
1赞
Barmar
6/13/2023
是的,这是查看不断变化的数据所固有的。但是有些应用程序以不同的方式进行分页 - 它们会制作一个快照,然后您分页浏览它。在这种情况下,您不必担心查询之间的一致性。
1赞
Barmar
7/2/2023
索引并不真正相关。重要的是结果集中是否存在任何重复项。索引的唯一相关性是,当一列是唯一的时,您知道它不会有任何重复项。但是,当您开始联接表时,如果它们与多行联接,则可以创建唯一列的副本。
1赞
Barmar
7/2/2023
ORDER BY 应包含保证结果中唯一排序的所有列。具体情况取决于实际查询(例如,更改内容)。当涉及联接时,很难给出一个通用的答案。GROUP BY
0赞
mexok
6/13/2023
#2
要回答您的问题,请执行以下操作:
- 是的
- 是的,但更具体地说:这是mysql用来对导致随机性的数据进行排序的快速排序算法。
- 如果你需要一个确定性的查询,那么是的,这是一个很好的方法。
上一个:与不可变对象的参数绑定
评论
ORDER BY