我正在使用使用proxysql的ndb集羣設置。有4個mysql服務器,4個數據節點和2個管理節點。當我直接訪問某個mysql服務器時會發生以下情況,所以我認爲我可以安全地排除proxysql作爲根本原因,但除此之外,我只是丟失了。返回的MySQL查詢結果是半隨機的/不一致的有序
這裏有一個表我建立了幫助說明我的問題:
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)
它包含以下數據;請注意,我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)
如果我不指定一個ORDER子句,返回的結果是看似隨意,像這樣的:
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)
當我重複查詢( sans order clause)我每次都會得到不同的訂單。它似乎並不是真正的隨機,但是肯定的是,對我而言,這並不是什麼可辨別的模式。
這是怎麼發生的?我對mysql的經驗總是默認的排序主要是根據主鍵,但這也是我第一次特別使用ndb集羣;我不知道這裏是否有區別,或者是否有配置文件中的設置被忽略或者什麼。任何幫助是極大的讚賞!
正如你剛纔所意識到的,除非你指定了順序,否則在每個數據庫行中都不是有序的數據集。順序可能因索引,羣集,磁盤分區等而異。只是數據庫以最有效的方式收集請求的數據。而且因爲你沒有設置'ORDER BY',所以他沒有努力訂購它,並且每次都可以得到不同的結果。 –
這很有道理,並且當我嘗試找出解決方案時遇到的其他信息與我之前遇到的其他信息相似,但根據我以前的經驗,這似乎是違反直覺的。它肯定只是確認偏見,環境差異或類似情況,我想我不能依靠找到更廣泛的,一刀切的解決方案。 非常感謝您的快速響應! – loungehead
由於您沒有指定'ORDER BY'子句,因此它不應該以您得到結果的順序來打擾您。如果您需要訂單,請使用'ORDER BY'子句,因爲這是保證排序結果的唯一方法。一旦查詢在並行線程中執行,結果順序變得非常典型,因爲查詢的每次執行都不會有'ORDER BY'而變化。 –