2014-04-16 5 views
-1

내가 테이블에서 20 개 임의의 이미지를 얻을 필요가 나의 현재 쿼리가이 질문에 도움이 될큰 테이블에 대해 RAND() 함수를 최적화하려면 어떻게해야합니까?

SELECT * FROM foo ORDER BY RAND() LIMIT 20; 

하지만 자신의 쿼리가 훨씬 더 복잡하다, 나는 대답을 이해 메신저 초보자부터 How can i optimize MySQL's ORDER BY RAND() function?

+1

나는 그와 함께 내 대답을 업데이트하지만 그의 쿼리 난 단지 모든 것을 선택하고 X 금액을 반환해야 – user3531149

+0

너무 복잡 : 숫자는 적어도 20 여러분이이 계산을 자동화 할 수있을 것이라고 확신 할 수 – user3531149

+0

문제가 _ 복잡하기 때문입니다. 그건 : 문제에도 불구하고 아주 짧은 설명을 가지고, 그것은 쉽게 MySQL에서 해결할 수있는 일이 아니야. –

답변

3

쿼리의 성능 문제는 rand() 그 자체가 아니고 많은 수의 행에 order by입니다. 당신이 foo는 행의 특정 숫자를 가지고 있음을 알고 있다면,이 같은 훨씬 빠르게 실행됩니다 1,000,000 말하십시오 where 절은 약 100에 order by에 대한 행의 수를 줄이고, 당신은 것

SELECT * 
FROM foo 
WHERE RAND() < 0.00001 
ORDER BY RAND() 
LIMIT 20; 

SELECT * 
FROM foo cross join 
    (SELECT count(*) as cnt FROM foo) const 
WHERE RAND() < 100.0/cnt 
ORDER BY RAND() 
LIMIT 20; 
+0

놀라운 ansnwer 감사합니다. – user3531149

관련 문제