MySQL의 ORDER BY RAND() 함수는 실제로 무작위 선택 알고리즘을 사용합니까?

Patricia Arquette
풀어 주다: 2024-11-03 14:08:30
원래의
426명이 탐색했습니다.

Does MySQL's ORDER BY RAND() Function Actually Use a Random Selection Algorithm?

MySQL의 ORDER BY RAND() 함수는 무작위 선택 알고리즘인가요?

데이터베이스 작업 영역에서는 정말 무작위로 데이터를 검색합니다. 순서는 수수께끼가 될 수 있습니다. MySQL의 ORDER BY RAND() 함수는 오랫동안 이 목적으로 사용된 도구였지만 명백한 무작위성 뒤에 있는 기본 메커니즘은 다소 파악하기 어렵습니다.

ORDER BY RAND()가 임의의 열을 추가한다는 가정에도 불구하고 정렬하기 전에 테이블을 분석한 결과, 최근 연구에 따르면 그렇지 않은 것으로 나타났습니다. 대신 MySQL은 무작위 선택을 달성하기 위해 다른 전략을 사용합니다.

실제로 Jay가 자신의 블로그에서 제안한 쿼리는 무작위 행을 얻는 가장 효율적인 방법임이 입증되었습니다. 이 쿼리는 테이블의 최대 ID 범위 내에서 임의의 ID를 생성하는 하위 쿼리와 테이블을 조인합니다. 이 임의 ID보다 크거나 같은 ID를 가진 행으로 테이블 행을 필터링하면 쿼리가 임의의 행을 빠르게 검색합니다.

그러나 세 가지 유사한 쿼리의 실행 시간과 관련하여 특이한 관찰이 이루어졌습니다.

  • SELECT * FROM table ORDER BY RAND() LIMIT 1; (30-40초)
  • SELECT id FROM table ORDER BY RAND() LIMIT 1; (0.25초)
  • SELECT ID, 사용자 이름 FROM 테이블 ORDER BY RAND() LIMIT 1; (90초)

세 가지 쿼리 모두 단일 열을 기준으로 정렬되므로 이러한 다양한 실행 시간은 직관적이지 않은 것처럼 보입니다. 이러한 차이는 인덱싱에 기인할 수 있습니다.

두 번째 쿼리에서는 id 열이 인덱싱되어 데이터에 빠르게 액세스할 수 있습니다. 그러나 세 번째 쿼리에 사용자 이름과 같은 추가 열을 포함하려면 MySQL이 각 행을 읽고 이러한 값에 대해 메모리를 할당해야 하므로 실행 시간이 크게 늘어납니다.

결론적으로 MySQL의 ORDER BY RAND() 함수는 진정한 무작위 선택 알고리즘. 대신 무작위 ID를 생성하는 하위 쿼리와 테이블을 조인하여 무작위성을 시뮬레이션하는 기술을 사용합니다. 가장 효율적인 접근 방식은 아니지만 겉보기에 무작위 순서로 데이터를 검색하는 실용적인 방법을 제공합니다.

위 내용은 MySQL의 ORDER BY RAND() 함수는 실제로 무작위 선택 알고리즘을 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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