當通過對MariaDB 10.1.18有限制的查詢運行訂單時,我得到錯誤的訂單。MariaDB 10.1訂單+限制不一致
觀察查詢沒有LIMIT聲明:
select advert_id, published, id from vacancies order by published asc;
+-----------+-----------+----+
| advert_id | published | id |
+-----------+-----------+----+
| 328377 | 0 | 70 |
| 328844 | 0 | 80 |
| 325263 | 0 | 41 |
| 325774 | 0 | 40 |
| 325775 | 0 | 39 |
| 325929 | 0 | 38 |
| 325885 | 0 | 37 |
| 325901 | 0 | 36 |
| 325920 | 0 | 35 |
| 325917 | 0 | 34 |
| 325922 | 0 | 33 |
| 325889 | 0 | 32 |
| 325927 | 0 | 31 |
| 325238 | 0 | 43 |
| 325244 | 0 | 45 |
| 328365 | 0 | 71 |
| 328446 | 0 | 72 |
| 328362 | 0 | 68 |
| 323602 | 0 | 55 |
| 324250 | 0 | 54 |
| 324254 | 0 | 53 |
| 324911 | 0 | 52 |
與限位聲明:
select advert_id, published, id from vacancies order by published asc limit 10;
+-----------+-----------+----+
| advert_id | published | id |
+-----------+-----------+----+
| 327830 | 0 | 1 |
| 326865 | 0 | 18 |
| 327328 | 0 | 9 |
| 326877 | 0 | 16 |
| 326783 | 0 | 21 |
| 326779 | 0 | 17 |
| 326774 | 0 | 15 |
| 326864 | 0 | 20 |
| 326788 | 0 | 14 |
| 326767 | 0 | 19 |
+-----------+-----------+----+
順序由發表在兩個不同的查詢。
爲了便於比較,我在MariaDB 5.5.50上運行了相同的查詢,並通過+ limit正確返回與查詢順序相同的結果。所以從我的理解是這個問題是MariaDB特定的,只存在於較新的版本。
此外,我還運行了相同的查詢,但在具有許多不同值的varchar字段上排序,在這種情況下,順序是正確的。所以我認爲這個問題只適用於對具有很多相同值的字段進行限制排序。
有誰知道是否有解決方法? MariaDB中的設置可能是?
FYI:
表結構:
+------------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| advert_id | int(11) | YES | | NULL | |
| published | tinyint(1) | NO | | 0 | |
| (other fields omitted)
說明上查詢:
explain select advert_id, published, id from vacancies order by published asc;
+------+-------------+-----------+------+---------------+------+---------+------+------+----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+-------------+-----------+------+---------------+------+---------+------+------+----------------+
| 1 | SIMPLE | vacancies | ALL | NULL | NULL | NULL | NULL | 52 | Using filesort |
+------+-------------+-----------+------+---------------+------+---------+------+------+----------------+
explain select advert_id, published, id from vacancies order by published asc limit 10;
+------+-------------+-----------+------+---------------+------+---------+------+------+----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+-------------+-----------+------+---------------+------+---------+------+------+----------------+
| 1 | SIMPLE | vacancies | ALL | NULL | NULL | NULL | NULL | 52 | Using filesort |
+------+-------------+-----------+------+---------------+------+---------+------+------+----------------+
版本與秩序的問題:
mysql Ver 15.1 Distrib 10.1.18-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
版本沒有秩序的問題:
mysql Ver 15.1 Distrib 5.5.50-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
但是'published'始終爲'0' –
您應該在指定時指定要使用的_all_列。 –
@juergend是的,但有記錄它是1.問題是,當我使用MariaDB在分頁中使用的這種隨機排序時,有些記錄就不會顯示。 – Jones03