想象一个具有大量行(例如 3 亿行)的 SQL 表。
每行都有一个文本字段,我想随机检索 10 行。
问题在于使用
select key from the_table where enabled=1 order by rand() limit 10
计算兰特值并按该值对所有行进行排序是一个非常高的负载。
有什么办法可以避免这种情况吗?
最佳答案
如果您可以在 SQL 之外生成 key (即使需要使用 15-20 来获取启用的 10 个 key ),您就可以跳过 order(),这几乎肯定是加载时出现的问题
SELECT 键 WHERE key IN [x,y,z....]
其中 x、y、z 是在外部随机生成的。
更好的是,您可以创建一个启用键的表,随机排序,然后以 10 个为一组进行分页。您偶尔需要更新它,并且会占用空间,但这可能没什么大不了的。
还有更复杂的解决方案,但这会让您感动。
关于mysql - 高 table 中的兰德,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10853406/