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