最新消息: 新版网站上线了!!!

mysql 优化之6:千万不要 ORDER BY RAND(),MySQL会不得不去执行RAND()函数(很耗CPU时间)

mysql 优化20条之6:千万不要 ORDER BY RAND(),MySQL会不得不去执行RAND()函数(很耗CPU时间)

想打乱返回的数据行?随机挑一个数据?真不知道谁发明了这种用法,但很多新手很喜欢这样用。但你确不了解这样做有多么可怕的性能问题。


如果你真的想把返回的数据行打乱了,你有N种方法可以达到这个目的。这样使用只让你的数据库的性能呈指数级的下降。这里的问题是:MySQL会不得不去执行RAND()函数(很耗CPU时间),而且这是为了每一行记录去记行,然后再对其排序。就算是你用了Limit 1也无济于事(因为要排序)


下面的示例是随机挑一条记录



// 千万不要这样做:


$r= mysql_query("SELECT username FROM user ORDER BY RAND() LIMIT 1");


 


// 这要会更好:


$r= mysql_query("SELECT count(*) FROM user");


$d= mysql_fetch_row($r);


$rand= mt_rand(0,$d[0] - 1);


 


$r= mysql_query("SELECT username FROM user LIMIT $rand, 1");


.....

转载请注明:谷谷点程序 » mysql 优化之6:千万不要 ORDER BY RAND(),MySQL会不得不去执行RAND()函数(很耗CPU时间)