gpt4 book ai didi

返回的 MySQL 查询结果是半随机/不一致排序的

转载 作者:行者123 更新时间:2023-11-28 23:09:38 24 4
gpt4 key购买 nike

我正在使用一个使用 proxysql 的 ndb 集群设置。有4台mysql服务器,4个数据节点,2个管理节点。当我直接访问其中一个 mysql 服务器时会发生以下情况,因此我认为我可以安全地排除 proxysql 作为根本原因,但除此之外我就迷路了。

这是我为帮助说明我的问题而设置的表格:

mysql> describe delain;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| album_id | tinyint(2) | NO | PRI | NULL | auto_increment |
| album | varchar(30) | YES | | NULL | |
+----------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

它包含以下数据;请注意,我指定了一个 order by 子句:

mysql> select * from delain order by album_id;
+----------+-------------------------+
| album_id | album |
+----------+-------------------------+
| 1 | Lucidity |
| 2 | April Rain |
| 3 | We Are the Others |
| 4 | The Human Contradiction |
| 5 | Moonbathers |
+----------+-------------------------+
5 rows in set (0.00 sec)

如果我不指定顺序子句,返回的结果看起来是随机的,例如:

mysql> select * from delain;
+----------+-------------------------+
| album_id | album |
+----------+-------------------------+
| 3 | We Are the Others |
| 5 | Moonbathers |
| 1 | Lucidity |
| 2 | April Rain |
| 4 | The Human Contradiction |
+----------+-------------------------+
5 rows in set (0.00 sec)

当我重复查询(没有 order 子句)时,我几乎每次都得到不同的排序。它似乎并不是真正随机的,但对我来说确实没有任何可辨别的模式。

为什么会这样?我对 mysql 的经验一直是默认排序基本上是根据主键,但这也是我第一次特别使用 ndb 集群;我不知道那里是否存在差异,或者配置文件中是否有遗漏的设置或其他什么。非常感谢任何帮助!

最佳答案

这是标准的 SQL 行为。

https://mariadb.com/kb/en/library/sql-99/order-by-clause/部分说:

An ORDER BY clause may optionally appear after a query expression: it specifies the order rows should have when returned from that query (if you omit the clause, your DBMS will return the rows in some random order).

(强调我的)

更准确的说法是它将以某种任意顺序返回行,而不是随机顺序。随机表示顺序将从一次执行更改为下一次执行。

  • 在 InnoDB 的情况下,顺序往往是访问行的索引顺序。它读取的索引不一定是主键。因此,如果您对内部结构有所了解,那么顺序是不变的并且在某种程度上是可以预测的。但这不是随机的。

  • 在 MyISAM 的情况下,顺序往往是行在表中的存储顺序,这可能会因插入行的顺序以及文件中的空间位置而异在插入时,在行删除之后。

  • 就 NDB 而言,我不太了解它的内部结构,所以我无法描述它的“默认”顺序规则,但如果没有明确的 ORDER BY,这仍然是事实,存储引擎可以按照它想要的任何顺序返回行。

关于返回的 MySQL 查询结果是半随机/不一致排序的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46330574/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com