mar*_*rcv 4 mysql order-by select mysql-5.6
一些记录通过以下查询显示在多个结果“页面”上:
SELECT
`description`,
`wallpaper`
FROM
`bbr_bar`
WHERE
`country_id` = '2510769'
ORDER BY
`online` DESC
Run Code Online (Sandbox Code Playgroud)
例如,id 为 99 的记录显示在第一个“页面”( LIMIT 10 OFFSET 0
) 上,但也显示在最后一个“页面”上LIMIT 10 OFFSET 50
。显然这不应该发生。
在以下情况下该问题消失:
country_id
都是online
,int(11)
不是外键)SELECT
(都是varchar(255)
,而不是外键)CREATE TABLE
或INSERT
声明,因为我认为它们不相关。我唯一可以肯定的是,如果我将mysqldump
所有表恢复到新模式中,问题仍然存在。
(表中还有其他字段,但添加/删除它们对结果没有影响)。
问题:
(MySQL 版本:5.6.24 Win32 x86)
我有一些坏消息要告诉你:根据 MySQL 的说法,这不是一个 BUG!
有两个关于此行为的错误报告,并且被认为不重要
如果没有明确的 ORDER BY,结果顺序是未定义的。时期。
即使相同的查询执行两次,结果的顺序也不同,这也没有问题。您可能已经习惯了看似确定性的结果,但这实际上是一种幻觉。这可能是您在通常情况下看到的,但没有任何东西可以保证这一点。随着统计数据的更新、索引树的重新洗牌、数据在不同物理机器上的分区,结果顺序可能会发生变化,因此结果顺序取决于网络延迟......
因此,如果您想要分页,请确保对保证唯一的内容进行 ORDER BY,或者接受这样一个事实:非唯一序列中相同值的排序顺序不是确定性的,并且可以随时更改,恕不另行通知。
在您的特定情况下,该online
领域可能不够明确。即使您bbr_bar
按 ( country_id
, online
) 进行索引,这可能仍然不够明显。您可能需要涉及另一列来驱动排序顺序(可能是自动增量字段或时间戳字段)。
试一试!!!!
归档时间: |
|
查看次数: |
6457 次 |
最近记录: |