Maison > base de données > tutoriel mysql > Comment sélectionner efficacement des lignes aléatoires dans une grande table MySQL ?

Comment sélectionner efficacement des lignes aléatoires dans une grande table MySQL ?

Linda Hamilton
Libérer: 2024-12-12 15:55:09
original
878 Les gens l'ont consulté

How to Efficiently Select Random Rows from a Large MySQL Table?

Sélection de lignes aléatoires avec MySQL : une solution détaillée

La question se pose fréquemment de savoir comment sélectionner efficacement des lignes aléatoires dans une grande table MySQL sans recourir à la méthode ORDER BY RAND(), connue pour être inefficace pour les ensembles de données plus volumineux. Pour relever ce défi, explorons une solution viable :

Approche basée sur MySQL :

Utilisez la combinaison des instructions SQL suivantes :

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;
Copier après la connexion

Cette approche implique :

  • Calcul d'un numéro de ligne aléatoire à l'aide de FLOOR(RAND() * (row count)).
  • Combinaison du numéro de ligne aléatoire avec un décalage dans une requête SQL dynamique.
  • Préparation et exécution de la requête construite.

PHP -Approche basée :

Si vous préférez travailler avec PHP, vous pouvez utiliser le code suivant extrait :

<?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();
Copier après la connexion

Cette approche implique :

  • Récupérer le nombre de lignes à l'aide d'une requête COUNT(*).
  • Générer un décalage aléatoire.
  • Exécution d'une requête SELECT avec le décalage calculé pour récupérer une seule ligne aléatoire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal