首頁 > 資料庫 > mysql教程 > 如何從大型 MySQL 表中有效地選擇隨機行?

如何從大型 MySQL 表中有效地選擇隨機行?

Linda Hamilton
發布: 2024-12-12 15:55:09
原創
885 人瀏覽過

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;
登入後複製

利用以下SQL 語句的組合:

  • 此方法涉及:
  • 使用以下方法計算隨機行數FLOOR(RAND() * (行數))。
  • 將隨機行號與動態 SQL 查詢中的偏移量結合。

準備並執行構造的查詢。

基於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();
登入後複製

如果您喜歡工作使用PHP,您可以使用以下程式碼片段:

  • 此方法需要:
  • 使用COUNT(*) 查詢來擷取行計數。
  • 產生隨機偏移量。
使用計算出的偏移量執行 SELECT 查詢以檢索單一隨機數行。

以上是如何從大型 MySQL 表中有效地選擇隨機行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板