order by random_bytes(8)没有影响。为什么?
使用 MySQL(在 AWS 无服务器 v2 上)
考虑这个测试过程:
create procedure Test()
begin
create temporary table Meow (Id bigint);
insert into Meow (Id) values (1);
insert into Meow (Id) values (2);
insert into Meow (Id) values (3);
insert into Meow (Id) values (4);
insert into Meow (Id) values (5);
select * from Meow order by random_bytes(8);
drop temporary table Meow;
end
Run Code Online (Sandbox Code Playgroud)
执行它总是会产生:1,2,3,4,5
所以我尝试了其他选择语句...首先,将其提取到子查询中:
select * from
(
select *, random_bytes(8) rnd from Meow
) a order by rnd;
Run Code Online (Sandbox Code Playgroud)
但结果仍然是1,2,3,4,5。实际输出:
[
{ Id: 1, rnd: <Buffer 3a 9d 00 9e b7 c5 80 91> },
{ Id: 2, rnd: <Buffer a0 5e 33 da 0c c0 5c 80> },
{ Id: 3, rnd: <Buffer 1a f0 78 84 85 29 a3 22> },
{ Id: 4, rnd: <Buffer 77 f0 be 54 37 44 94 15> },
{ Id: 5, rnd: <Buffer c3 cc c1 2d 79 2b f3 df> }
]
Run Code Online (Sandbox Code Playgroud)
然后我怀疑它可能不喜欢使用字节,所以我尝试使用字符串:
select * from
(
select *, hex(random_bytes(8)) rnd from Meow
) a order by rnd;
Run Code Online (Sandbox Code Playgroud)
但同样,它始终是 1, 2, 3, 4, 5。实际输出:
[
{ Id: 1, rnd: '8896C5F824A86BCF' },
{ Id: 2, rnd: '42C16697444537C6' },
{ Id: 3, rnd: '538D11E7FDA91D10' },
{ Id: 4, rnd: '09F3069EF0A36E6C' },
{ Id: 5, rnd: '706DEC985E298FA5' }
]
Run Code Online (Sandbox Code Playgroud)
为什么?
PS:我用 进行了测试order by Id desc,结果返回 5, 4, 3, 2, 1。
编辑(回答评论Q): select Version()= 8.0.23 ...表与临时表没有区别。
解答:这是一个优化器错误,已由 mysql 团队验证。错误提交地址:https://bugs.mysql.com/bug.php? id=111252
更新:在 8.0.34 中修复 - https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-34.html