Sélectionnez efficacement des échantillons aléatoires à partir des tables SQL Server
La récupération d'échantillons de lignes aléatoires à partir de grandes tables SQL Server est utile à diverses fins. Une approche courante consiste à générer une colonne « nombre aléatoire » dans une table temporaire, à la remplir avec des valeurs aléatoires, puis à sélectionner les lignes dans lesquelles le nombre aléatoire se situe dans la plage souhaitée. Cependant, cette approche peut s’avérer complexe et inefficace.
Une méthode plus directe consiste à utiliser la fonction NEWID(). NEWID() génère un identifiant unique basé sur une combinaison d'heure système et de caractère aléatoire. En triant le tableau en fonction du résultat de NEWID(), vous randomisez efficacement l'ordre des lignes.
Pour sélectionner un pourcentage spécifique de lignes, vous pouvez utiliser la clause TOP. Par exemple, pour sélectionner 10 % des lignes d'une table nommée [votretable], vous utiliserez la requête suivante :
<code class="language-sql">SELECT TOP 10 PERCENT * FROM [yourtable] ORDER BY NEWID();</code>
Bien que cette méthode soit généralement efficace, vous pouvez rencontrer des problèmes de performances lorsque vous travaillez avec des tables particulièrement volumineuses. Pour optimiser les performances, vous pouvez combiner les clauses TOP et WHERE :
<code class="language-sql">SELECT * FROM [yourtable] WHERE [yourPk] IN ( SELECT TOP 10 PERCENT [yourPk] FROM [yourtable] ORDER BY NEWID() );</code>
Cette requête utilise [yourPk] comme clé primaire. La requête interne récupère les clés primaires des lignes sélectionnées et la requête externe utilise ces clés primaires pour filtrer la table. Cette approche améliore les performances en réduisant le nombre de lignes analysées.
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!