MySQL의 ORDER BY RAND()
은 임의의 데이터베이스 항목을 가져오는 간단한 방법입니다. 그러나 이 방법을 사용하여 여러 임의 행을 검색하면 특히 대규모 데이터세트의 경우 속도가 매우 느려집니다.
18개의 무작위 사용자 프로필을 선택하는 것을 목표로 하는 다음 쿼리를 고려해보세요.
<code class="language-sql">SELECT u.id, p.photo FROM users u, profiles p WHERE p.memberid = u.id AND p.photo != '' AND (u.ownership=1 OR u.stamp=1) ORDER BY RAND() LIMIT 18</code>
비효율성은 ORDER BY RAND()
절을 적용하기 전에 전체 결과 집합을 정렬해야 하는 LIMIT
의 본질적인 요구에서 비롯됩니다.
보다 효율적인 접근 방식
우수한 전략은 색인화된 열을 활용하여 무작위 선택 속도를 극적으로 높이는 것입니다. 최적화된 쿼리는 다음과 같습니다.
<code class="language-sql">SELECT g.* FROM table g JOIN (SELECT id FROM table WHERE RAND() < (SELECT 4 / COUNT(*) ) * 10 LIMIT 4) AS subquery ON g.id = subquery.id;</code>
최적화 설명
이 수정된 쿼리에는 몇 가지 주요 개선 사항이 포함되어 있습니다.
RAND()
을 사용하여 행을 필터링합니다. id
열(또는 WHERE
절에 사용되는 열)을 인덱싱하면 행을 빠르게 식별할 수 있습니다.LIMIT
절이 동일해야 합니다.WHERE
조건을 통합하여 데이터 무결성을 보장합니다.이 방법은 대규모 테이블에서도 쿼리 실행 시간을 크게 줄여 여러 무작위 결과를 검색하기 위한 훨씬 더 확장 가능한 솔루션을 제공합니다.
결론
이러한 최적화 기술은 MySQL에서 무작위 데이터 선택을 처리할 때 상당한 성능 향상을 제공합니다. ORDER BY RAND()
을 피함으로써 보다 효율적이고 강력한 데이터베이스 애플리케이션을 만들 수 있습니다.
위 내용은 'ORDER BY RAND()'를 사용하지 않고 데이터베이스에서 여러 무작위 결과를 효율적으로 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!