大規模なデータベース テーブルからランダムな行を選択するのは困難な場合があります。一般的に推奨される ORDER BY RAND() アプローチは、テーブルが大きくなるにつれてスケーラビリティの問題に直面します。
代替アプローチ
よりスケーラブルな方法には、MySQL のネイティブ変数操作とクエリを利用することが含まれます。連結機能。以下に例を示します。
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;
この手法では、テーブル内のランダムなオフセットを計算し、それを使用して単一行を効率的に取得します。
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(); ?>
これらの手法を活用すると、パフォーマンスを損なうことなく、大規模な MySQL テーブルからランダムな行を効果的に取得できます。
以上が大規模な MySQL テーブルからランダムな行を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。