从大型mysql表中 Select 随机行的快速方法是什么?

我在用php工作,但我对任何解决方案都感兴趣,即使是用另一种语言.

推荐答案

获取所有id,从中随机选取一个,然后检索整行.

如果你知道id是连续的,没有孔,你可以抓住最大值,然后计算一个随机id.

如果到处都有洞,但大多是连续的值,并且你不关心稍微有点倾斜的随机性,那么抓住最大值,计算一个id,然后 Select id等于或高于你计算的id的第一行.造成这种倾斜的原因是,跟随这些洞的id比跟随另一个id的id更有可能被选中.

如果你随机点菜,你的手上会有一个可怕的表格扫描,而quick这个词不适用于这种解决方案.

不要这样做,也不应该按GUID订购,它也有同样的问题.

Mysql相关问答推荐

根据键的数量,SQL Json字段分为行

无法从容器从APS. NET应用程序连接到MySQL服务器容器

LaravelEloquent ToSql()缺少连接表

Laravel DB::Transaction()

在时间戳上搜索大的MySQL表很慢

在MySQL CLI中,是否有自动完成过程的方法?

PythonAnywhere中SSH到MySQL数据库无限期挂起,SSH正确,workbench可以完美连接

为什么嵌套循环逻辑不能按预期工作

错误:此查询集包含对外部查询的引用,并且只能在子查询中使用

为什么用PyMySQL构建的json返回结果会出现重复?

如何通过SQL来计算到达特定值的行的数量

特定时间段内每个客户的运行总计

如何更新一个巨大的表的 50k 行?

Next-key lock explication - 范围的主键

如何在 MySQL 中查找重复值和更新值

如何使用 SQL 聚合和求和相似 Select 的值?

INNER JOIN 问题(MySQL 错误代码:1054)

如何查询打印已售罄的产品? [MYSQL]

如何通过一个查询批量更新 mysql 数据?

MySQL SELECT 增量计数器