> 데이터 베이스 > MySQL 튜토리얼 > mysql的ORDER BY RAND()优化_MySQL

mysql的ORDER BY RAND()优化_MySQL

WBOY
풀어 주다: 2016-06-01 13:31:28
원래의
1176명이 탐색했습니다.

bitsCN.com

mysql的ORDER BY RAND()优化

 

我们都知道,mysql里用到ORDER BY RAND()在数据量比较多的时候是很慢的,因为会导致mysql全表扫描,故也不会用到索引,

所以ORDER BY RAND()用来随机时已经是到禁区里了,所以我们应该尽量避免使用ORDER BY RAND()才对,所以这个是需要用其他方法替代或者优化才行。

 

当我们随机一条数据时可以考虑一下:

 

[php] $DBI=new dbi2($__DBserver);  $num=$DBI->result('select count(1) as num from article');//获取总条数,数据库引擎为MyISAM采用吧  $num=$num[0]['num']-1;  $num=rand(1, $num);  $list=$DBI->result('SELECT id FROM acticle ORDER BY viewcount DESC LIMIT ?,1',$num);//利用limit  
로그인 후 복사

随机多条数据时,为了避免全表扫描,可以取出一小部分在随机,这个随机性会落在一个小范围内:

[php] $DBI=new dbi2($__DBserver);  //在200条范围内取10条随机  $list=$DBI->result('SELECT id FROM (SELECT id FROM acticle ORDER BY viewcount DESC LIMIT ?)X ORDER BY RAND() LIMIT ?',200,10);  
로그인 후 복사

 

 

bitsCN.com
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿