Maison >développement back-end >C++ >Comment récupérer efficacement les lignes aléatoires d'une base de données à l'aide de LINQ à SQL?

Comment récupérer efficacement les lignes aléatoires d'une base de données à l'aide de LINQ à SQL?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-26 16:16:09480parcourir

How to Efficiently Retrieve Random Rows from a Database Using LINQ to SQL?

linq à SQL Recherche de ligne aléatoire efficace

Lorsque vous utilisez LINQ à SQL pour récupérer la ligne aléatoire de la base de données, si elle dépend du filtrage et de la randomisation du client, il peut rencontrer des problèmes de performance. La méthode suivante fournit une approche aléatoire d'une récupération efficace qui remplit des conditions spécifiques:

Utilisation de la fonction personnalisée de l'utilisateur analogique (UDF)

Pour les tables de petite et moyenne taille, l'UDF simulé peut être utilisé pour effectuer un fonctionnement aléatoire au niveau de la base de données. Dans le contexte des données, définissez une partie de la classe et ajoutez les méthodes suivantes:

Bien que cet UDF ne soit pas réellement implémenté dans le code C #, SQL Server l'utilisera pour effectuer un tri aléatoire. Pour récupérer les lignes aléatoires en fonction des conditions, veuillez utiliser les demandes suivantes:

<code class="language-csharp">partial class MyDataContext {
     [Function(Name="NEWID", IsComposable=true)] 
     public Guid Random() 
     {
         throw new NotImplementedException(); 
     }
}</code>

La méthode de comptage

<code class="language-csharp">var cust = (from row in ctx.Customers
           where row.IsActive // 您的筛选条件
           orderby ctx.Random()
           select row).FirstOrDefault();</code>

Pour les grandes tables, les méthodes basées sur le comptage peuvent être plus efficaces. Le principe de travail est le suivant: Utiliser Calculez le nombre de lignes de tête.

Dans la plage de 0 à 1, un indice aléatoire est généré.

    Utiliser pour récupérer la ligne d'index aléatoires.
  1. qry.Count()
  2. Cette méthode implique deux retours dans la base de données, mais par rapport à l'utilisation de fonctions de tri aléatoire, il a une meilleure évolutivité en termes de taille de table.

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!

Déclaration:
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