ホームページ > データベース > 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート