一亿行的 MySQL 表,主键 ID 不连续,怎样随机取 30 行速度最快?

yufei       3 年, 10 月 前       733

超级大的表(一亿行)的 MySQL 表,主键 ID 不连续,怎样随机取 N (30 行)条速度最快?

这个问题是 https://v2ex.com/t/754193#reply26 上看到的。

我提供的解法是使用 PHP 的 rand() 函数先生成 60 个随机数,然后去数据库里取,如果不够则继续生成 60 条数据。

也就是说在超级大表里随机要取 N 条,则先生成 2N 个随机数,然后去数据库里读取数据

为什么这样?

  1. MySQL 永远是后端的瓶颈。对于数据库的操作,永远是越简单越好。因此不要做任何计算是最好的。
  2. 无论如何做,都无法避免第一次不够的问题,那么最好的办法就是参考 C++ 标准库中的 vect 扩容方案,就是每次递增 2N 这样的。

如果有更好的方案欢迎你提出

目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.