> 데이터 베이스 > MySQL 튜토리얼 > 대규모 MySQL 테이블에서 무작위 행을 효율적으로 선택하는 방법은 무엇입니까?

대규모 MySQL 테이블에서 무작위 행을 효율적으로 선택하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-12 15:55:09
원래의
879명이 탐색했습니다.

How to Efficiently Select Random Rows from a Large MySQL Table?

MySQL을 사용하여 임의 행 선택: 자세한 솔루션

대규모 MySQL 테이블에서 임의 행을 효과적으로 선택하는 방법에 대한 질문이 자주 발생합니다. 대규모 데이터세트에는 비효율적인 것으로 알려진 ORDER BY RAND() 메서드를 사용합니다. 이 문제를 해결하기 위해 실행 가능한 솔루션을 살펴보겠습니다.

MySQL 기반 접근 방식:

다음 SQL 문 조합을 활용하세요.

SET @r := (SELECT FLOOR(RAND() * (SELECT COUNT(*) FROM mytable)));
SET @sql := CONCAT('SELECT * FROM mytable LIMIT 1 OFFSET ', @r);
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
로그인 후 복사

이 접근 방식에는 다음이 포함됩니다.

  • 다음을 사용하여 임의의 행 번호 계산 FLOOR(RAND() * (행 개수)).
  • 동적 SQL 쿼리에서 임의의 행 번호와 오프셋을 결합합니다.
  • 구성된 쿼리 준비 및 실행.

PHP 기반 접근 방식:

원하는 경우 PHP로 작업하려면 다음 코드 조각을 사용할 수 있습니다.

<?php
$mysqli->begin_transaction();
$result = $mysqli->query("SELECT COUNT(*) FROM mytable");
$row = $result->fetch_row();
$count = $row[0];
$offset = mt_rand(0, $count);
$result = $mysqli->query("SELECT * FROM mytable LIMIT 1 OFFSET $offset");
...
$mysqli->commit();
로그인 후 복사

이 접근 방식에는 다음이 포함됩니다.

  • COUNT(*) 쿼리를 사용하여 행 수 검색
  • 임의 오프셋 생성.
  • 계산된 오프셋으로 SELECT 쿼리를 실행하여 검색 단일 임의 행.

위 내용은 대규모 MySQL 테이블에서 무작위 행을 효율적으로 선택하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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