> 데이터 베이스 > MySQL 튜토리얼 > ORDER BY RAND()는 MySQL에서 어떻게 작동하며 왜 그렇게 느린가요?

ORDER BY RAND()는 MySQL에서 어떻게 작동하며 왜 그렇게 느린가요?

Barbara Streisand
풀어 주다: 2024-11-04 06:07:01
원래의
566명이 탐색했습니다.

How Does ORDER BY RAND() Work in MySQL, and Why Is It So Slow?

MySQL의 ORDER BY RAND() 이해

ORDER BY RAND() 구문은 간단해 보이지만 내부 작동 방식은 수수께끼일 수 있습니다. 이 문서에서는 이 작업의 메커니즘을 자세히 알아보고 예상치 못한 성능 불일치를 해결합니다.

ORDER BY RAND()의 기능

처음에는 ORDER BY RAND가 ()는 테이블에 임의의 값 열을 추가하고 이를 기준으로 정렬했습니다. 그러나 후속 연구에서는 Jay가 제안한 방법이 훨씬 더 빠른 것으로 나타났습니다.

SELECT * FROM Table T JOIN (SELECT CEIL(MAX(ID)*RAND()) AS ID FROM Table) AS x ON T.ID >= x.ID LIMIT 1;
로그인 후 복사

이 방법은 기존 ID 범위 내에서 임의의 ID를 생성하고 일치하는 첫 번째 행을 검색합니다.

성능 변화

흥미롭게도 ORDER BY RAND()의 성능은 포함된 열에 따라 달라집니다. 결과는 다음과 같습니다.

SELECT * FROM table ORDER BY RAND() LIMIT 1; /*30-40 seconds*/
SELECT id FROM table ORDER BY RAND() LIMIT 1; /*0.25 seconds*/
SELECT id, username FROM table ORDER BY RAND() LIMIT 1; /*90 seconds*/
로그인 후 복사

이러한 불일치는 색인 생성으로 인해 발생할 수 있습니다. id 열은 인덱싱되어 검색 속도가 빠릅니다. 결과에 사용자 이름을 추가하려면 각 행에서 이를 읽어야 하므로 작업 속도가 느려집니다. *의 경우 가변 길이 열을 포함한 모든 열을 메모리에 로드해야 하므로 성능에 더욱 영향을 미칩니다.

빠른 무작위 선택을 위한 대안

의 경우 효율적인 무작위 행 선택을 위해 다음 대안을 고려하십시오.

  • 독일 블로거 아카이브에 설명된 절차 (web.archive.org/web/20200211210404/http://www.roberthartung.de/mysql-order-by-rand-a-case-study-of-alternatives/).
  • Jay의 방법을 사용하세요. , 복잡성 증가에도 불구하고 최적의 속도를 위해.
  • 다음 두 쿼리 접근 방식을 사용합니다. 단순함:
SELECT id FROM table ORDER BY RAND() LIMIT 1;
SELECT * FROM table WHERE id=ID_FROM_PREVIOUS_QUERY LIMIT 1;
로그인 후 복사

위 내용은 ORDER BY RAND()는 MySQL에서 어떻게 작동하며 왜 그렇게 느린가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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