> 데이터 베이스 > MySQL 튜토리얼 > 'ORDER BY RAND()'를 사용하지 않고 데이터베이스에서 여러 무작위 결과를 효율적으로 검색하려면 어떻게 해야 합니까?

'ORDER BY RAND()'를 사용하지 않고 데이터베이스에서 여러 무작위 결과를 효율적으로 검색하려면 어떻게 해야 합니까?

Mary-Kate Olsen
풀어 주다: 2025-01-21 03:36:08
원래의
271명이 탐색했습니다.

How Can I Efficiently Retrieve Multiple Random Results from a Database without Using `ORDER BY RAND()`?

MySQL의 무작위 데이터 검색으로 성능 병목 현상 방지

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 절에 사용되는 열)을 인덱싱하면 행을 빠르게 식별할 수 있습니다.
  • 무작위 ID만 적용: ID에만 무작위화가 적용되어 메모리 사용량을 최소화하고 성능을 향상시킵니다.
  • 일관적 제한: 하위 쿼리(4)와 전체 쿼리의 LIMIT 절이 동일해야 합니다.
  • 세련된 하위 쿼리: 하위 쿼리는 기본 쿼리와 동일한 WHERE 조건을 통합하여 데이터 무결성을 보장합니다.

이 방법은 대규모 테이블에서도 쿼리 실행 시간을 크게 줄여 여러 무작위 결과를 검색하기 위한 훨씬 더 확장 가능한 솔루션을 제공합니다.

결론

이러한 최적화 기술은 MySQL에서 무작위 데이터 선택을 처리할 때 상당한 성능 향상을 제공합니다. ORDER BY RAND()을 피함으로써 보다 효율적이고 강력한 데이터베이스 애플리케이션을 만들 수 있습니다.

위 내용은 'ORDER BY RAND()'를 사용하지 않고 데이터베이스에서 여러 무작위 결과를 효율적으로 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿