ホームページ >データベース >mysql チュートリアル >ORDER BY RAND() を使用せずに MySQL テーブルからランダムな行を効率的に選択する方法

ORDER BY RAND() を使用せずに MySQL テーブルからランダムな行を効率的に選択する方法

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-04 13:39:10300ブラウズ

How to Efficiently Select Random Rows from a MySQL Table Without 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。