> 데이터 베이스 > MySQL 튜토리얼 > 대규모 MySQL 데이터베이스에서 단순 무작위 샘플을 효율적으로 추출하려면 어떻게 해야 합니까?

대규모 MySQL 데이터베이스에서 단순 무작위 샘플을 효율적으로 추출하려면 어떻게 해야 합니까?

Linda Hamilton
풀어 주다: 2025-01-05 16:02:44
원래의
541명이 탐색했습니다.

How Can I Efficiently Extract a Simple Random Sample from a Large MySQL Database?

MySQL에서 효율적인 단순 무작위 샘플링 활용

문제 설명:

"명백한" 접근 방식(SELECT * FROM table ORDER)을 사용하면 대규모 MySQL 데이터베이스를 효율적으로 사용하는 것이 어려울 수 있습니다. BY RAND() LIMIT n). 이 방법의 비효율성은 각 행에 RAND()를 사용하고 이후 정렬을 수행하여 리소스를 많이 사용하는 O(n lg n) 복잡성으로 인해 발생합니다.

효율적인 솔루션:

이 장애물을 극복하려면 보다 효율적인 접근 방식을 고려해 보세요.

SELECT * FROM table WHERE RAND() <= 0.3
로그인 후 복사

이 솔루션 0과 1 사이의 각 행에 대해 난수를 생성한 다음 확률 임계값(이 경우 0.3)을 기준으로 해당 행을 표시할지 여부를 평가하는 기능으로 인해 "명백한" 방법보다 성능이 뛰어납니다.

설명:

  • O(n) 복잡도: 이 방법 순진한 접근 방식의 복잡성이 O(n lg n)인 것과 비교하여 행 정렬이 필요하지 않기 때문에 O(n) 시간에 작동합니다.
  • MySQL의 난수 생성: MySQL은 각 행에 대해 고유한 난수를 생성할 수 있는 장비가 잘 갖추어져 있으므로 이 방법을 실행 가능한 옵션으로 만들 수 있습니다.
  • 가정: 무작위성 가정은 RAND()가 균일하게 분포된 숫자를 생성한다고 가정할 때 이 솔루션의 기초가 됩니다.

추가 고려 사항:

  • 샘플링 제한: 원하는 크기의 표본을 확보하려면 이에 따라 확률 임계값을 조정하세요. 예를 들어, 200,000개의 행이 있는 테이블에서 10,000개의 행 샘플을 얻으려면 다음을 사용하십시오. SELECT * FROM table WHERE RAND() <= 0.05
  • 인덱스 최적화: 자주 업데이트되는 경우 삽입/업데이트 시 RAND() 결과를 인덱싱하여 개선하는 것을 고려하세요. 공연.

위 내용은 대규모 MySQL 데이터베이스에서 단순 무작위 샘플을 효율적으로 추출하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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