MySQL ID以256的倍数排序?

时间:2013-08-14 17:27:31

标签: mysql

所以我在一个数据库中有一堆记录,这些记录有一个Date_Created列,但是大多数行都有零数据。

+-----+---------------------+--
| id  | Date_Created        | Other_Fields...
+-----+---------------------+--
| 2   | 0000-00-00 00:00:00 | ...
+-----+---------------------+--
| 34  | 0000-00-00 00:00:00 | ...
+-----+---------------------+--
| 56  | 0000-00-00 00:00:00 | ...
+-----+---------------------+--
| ... | ...                 | ...
+-----+---------------------+--

有些行包含此列的非零数据,但这些行目前不是我关注的行。

我想知道的是,当我订购数据by Date_Created asc时,行以我不希望看到的方式返回。这就是ID的排序方式。

256
512
1024
1280
1536
257
513
1025
1281
1537
2049
2
258
514
1026
1282
1538
3
259
515
1027
1283
1539
4
260
...

(256的倍数)+ n,其中Date_Created基本上为0,用于整个事物。

仅当我select * from table order by Date_Created时才会发生这种情况。如果选择单个列(select id, Date_Created...),则ID会按顺序出现。

为什么会这样?

1 个答案:

答案 0 :(得分:2)

如果您按ORDER BY日期,mysql将完全这样做。如果所有日期都“相等”,则mysql不关心INSIDE中具有相同日期的元素的顺序。 (因为没有被告知,这样做!)

然后将结果称为“未定义”。它很可能取决于mysql将用于获取结果的(多个)线程。结果也可能与呼叫呼叫不同。

因此,如果您想确保在SAME数据上拥有SAME调用的SAME订单 - 请始终按id排序。

select * from table order by Date_Created, id