随机从数据表中取一条数据,我们一般会用到rand()函数,但是如果用不好的话,rand()的效率实在太低。
这是最基本的rand()用法。
我再表里加了一千万条测试数据。
这条语句竟然用了23秒多(我的机子性能还算可以的了),这实在令人崩溃。后来去看了mysql官方手册,里边意思是在order by 从句中使用rand()时,会导致数据列被多此扫描,所以效率会极低。
后来在某社区发现了一个有趣的写法,先查出来表中最大的id,再查出来表中最小的id,然后两个id加起来,再用rand()函数乘以加以来的结果,用floor函数向下取整,取出id大于这个这个整数的数据,用时0.002秒,跟之前那种写法简直是天壤之别。
这里解释下为什么要用最大值,最小值相加的结果,而不用count函数,因为count算出来的结果不一定比最大的id大,这样的话随机出来的结果就会有瑕疵;