超级大的表(一亿行)的 MySQL 表,主键 ID 不连续,怎样随机取 N (30 行)条速度最快?
这个问题是 https://v2ex.com/t/754193#reply26 上看到的。
我提供的解法是使用 PHP 的 rand()
函数先生成 60 个随机数,然后去数据库里取,如果不够则继续生成 60 条数据。
也就是说在超级大表里随机要取 N 条,则先生成 2N 个随机数,然后去数据库里读取数据。
为什么这样?
- MySQL 永远是后端的瓶颈。对于数据库的操作,永远是越简单越好。因此不要做任何计算是最好的。
- 无论如何做,都无法避免第一次不够的问题,那么最好的办法就是参考 C++ 标准库中的 vect 扩容方案,就是每次递增 2N 这样的。
如果有更好的方案欢迎你提出
目前尚无回复