gpt4 book ai didi

mysql - 从表中随机选择一条记录,为什么第一个比第二个慢?

转载 作者:可可西里 更新时间:2023-11-01 08:44:46 25 4
gpt4 key购买 nike

我想从一个大表中随机选择一条记录。经过查找,最终找到了两个解决方案;

一个:

select id  from `table` where id = (floor(1 + rand() * 2880000));

乙:

select id  from `table` where id >= (floor(1 + rand() * 2880000)) limit 1;

但是first(a)的解法比Second(b)慢得多,大约慢了40倍。

执行多次后,发现一个比较奇怪的问题。第一个解决方案可能会返回两条记录。

select id  from `table` where id = (floor(1 + rand() *  2880000));
+---------+
| id |
+---------+
| 2484024 |
| 1425029 |
+---------+
2 rows in set (1.06 sec)

我的问题是:

  • 为什么第一个解决方案比第二个解决方案慢?
  • 为什么第一个解决方案返回两条记录?

我的 MySQL 版本:

mysql> show variables like "%version%";
+-------------------------+-------------------------+
| Variable_name | Value |
+-------------------------+-------------------------+
| innodb_version | 5.5.43 |
| protocol_version | 10 |
| slave_type_conversions | |
| version | 5.5.43-0ubuntu0.12.04.1 |
| version_comment | (Ubuntu) |
| version_compile_machine | x86_64 |
| version_compile_os | debian-linux-gnu |
+-------------------------+-------------------------+
7 rows in set (0.04 sec)

感谢您的帮助。

最佳答案

两个问题的答案:

  1. 第一个解决方案比第二个慢,因为在第一个解决方案中,为每条记录计算一个新的随机值,而在第二个解决方案中,它只为找到匹配项所需的记录计算。另请注意,第二种解决方案的条件要宽松得多。
  2. 您可以在第一个解决方案中有多个返回值,因为会为每条记录计算一个新的随机值,而且您没有限制语句。按照同样的逻辑,您也可以得到 0 个结果。

看看this answer以获得更好的解决方案。

关于mysql - 从表中随机选择一条记录,为什么第一个比第二个慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31869405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com