그래서 MySQL에서는 ORDER BY RAND()를 사용하여 많은 행이있는 대형 테이블을 읽는 것이 좋지 않습니다 (~ 500 행 테이블이 있다고 가정). 느리고 비효율적입니다. 많은 행 검색.좋은 아이디어/나쁜 아이디어? 하위 쿼리 결과 집합 외부에서 MySQL RAND() 사용?
어떻게 (아래) 대체 방법으로 보입니까?
SELECT * FROM (... 일반적으로 20 개 미만 ... 행 세트 리턴 부질) ORDER BY RAND()를 LIMIT 8 큰 데이터 세트 대신 RAND를 사용
() 작은 하위 집합을 선택하고 난 다음에는 반환 된 행에 RAND()를 적용합니다. 모든 경우의 99.9 %에서 위의 하위 쿼리는 20 개 미만의 행을 선택해야합니다 (실제로는 일반적으로 8 개 미만).
사람들이 생각하는 것을 듣는 것이 궁금합니다.
는 (그냥 참조를 위해, 나는 PHP 내 MySQL의 물건을하고 있어요.)
감사합니다!
RAND BY t 순서와() LIMIT 8 (* TestData 사용 FROM 수 = 41을 선택). 그러나 언제나처럼, Your Mileage May Vary (tm). 이 subselect 방법의 일부 벤치마킹을 수행하고 전체 테이블에서 선택하는 벤치마킹을 수행하고 어디로 가는지 확인하십시오. –
** 실제로는 쿼리 캐시가 rand() (바이 패스 쿼리 캐시)에 영향을 미치지 않으므로 병목 현상이 이제 하위 쿼리 – ajreal
으로 옮겨졌습니다. 하위 쿼리가 "일반적으로 8보다 작습니다"를 반환하면 정확히 수행해야하는 이유 'RAND() LIMIT 8 '명령이 필요합니까? –