ホームページ >データベース >mysql チュートリアル >ORDER BY RAND() を使用せずに MySQL テーブルからランダムな行を効率的に選択する方法
質問:
データベースから指定された数のランダムな行を効率的に選択する方法リソースを大量に消費する可能性がある ORDER BY RAND() を使用せずに大きなテーブルを作成するメソッド?
答え:
MySQL 解決策:
ORDER を使用せずにクラス "one" から X 個のランダムな行を選択するにはBY RAND():
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(); ?>
このコードは、テーブルの行数内のランダムなオフセットを決定し、それを使用して指定された数のランダムな行を選択します。 LIMIT および OFFSET クエリ経由。
以上がORDER BY RAND() を使用せずに MySQL テーブルからランダムな行を効率的に選択する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。