내가 테이블에서 20 개 임의의 이미지를 얻을 필요가 나의 현재 쿼리가이 질문에 도움이 될큰 테이블에 대해 RAND() 함수를 최적화하려면 어떻게해야합니까?
SELECT * FROM foo ORDER BY RAND() LIMIT 20;
하지만 자신의 쿼리가 훨씬 더 복잡하다, 나는 대답을 이해 메신저 초보자부터 How can i optimize MySQL's ORDER BY RAND() function?
내가 테이블에서 20 개 임의의 이미지를 얻을 필요가 나의 현재 쿼리가이 질문에 도움이 될큰 테이블에 대해 RAND() 함수를 최적화하려면 어떻게해야합니까?
SELECT * FROM foo ORDER BY RAND() LIMIT 20;
하지만 자신의 쿼리가 훨씬 더 복잡하다, 나는 대답을 이해 메신저 초보자부터 How can i optimize MySQL's ORDER BY RAND() function?
쿼리의 성능 문제는 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;
놀라운 ansnwer 감사합니다. – user3531149
나는 그와 함께 내 대답을 업데이트하지만 그의 쿼리 난 단지 모든 것을 선택하고 X 금액을 반환해야 – user3531149
너무 복잡 : 숫자는 적어도 20 여러분이이 계산을 자동화 할 수있을 것이라고 확신 할 수 – user3531149
문제가 _ 복잡하기 때문입니다. 그건 : 문제에도 불구하고 아주 짧은 설명을 가지고, 그것은 쉽게 MySQL에서 해결할 수있는 일이 아니야. –