我想提取表格的随机行。使用“ORDER BY RAND”并获取第一行很慢,因为创建了一个单独的表。标准的替代方法是依赖必须是整数的唯一主索引。
但是,如果主键分布不均匀,这不会返回好的结果。此外,它要求我维护一列额外的整数。
我想提取表格的随机行。使用“ORDER BY RAND”并获取第一行很慢,因为创建了一个单独的表。标准的替代方法是依赖必须是整数的唯一主索引。
但是,如果主键分布不均匀,这不会返回好的结果。此外,它要求我维护一列额外的整数。
我在 T-SQL 中使用不均匀分布的键进行了一些随机选择,不需要添加额外的列,方法如下:
COUNT(...)
)即使您的主键分布不均匀,您仍然可以通过开放式范围查询来确保它们:
SELECT thing FROM table WHERE pk_id > 134 LIMIT 1;
即使没有键为 134 的行,您也会得到链中的下一个。这种方法的好处是它是一个简单的范围扫描并且效率很高。您也不需要知道表中有多少行(例如通过SELECT COUNT(*)
...),这在使用 InnoDB 时成本很高 - 您应该使用 InnoDB)。您确实需要执行最大行 ID,但这对于抓取 ( SELECT MAX(pk_id) FROM table
) 是有效的并且可以被缓存。