Heim > Backend-Entwicklung > C++ > Wie kann ich zufällige Zeilen aus einer Datenbank mit LINQ nach SQL effizient abrufen?

Wie kann ich zufällige Zeilen aus einer Datenbank mit LINQ nach SQL effizient abrufen?

Patricia Arquette
Freigeben: 2025-01-26 16:16:09
Original
520 Leute haben es durchsucht

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

LINQ to SQL effizienter zufälliger Zeilenabruf

Beim Verwenden von LINQ to SQL zum Abrufen zufälliger Zeilen aus einer Datenbank können Leistungsprobleme auftreten, wenn Sie sich auf clientseitige Filterung und Randomisierung verlassen. Die folgenden Methoden bieten eine effiziente Möglichkeit, zufällige Zeilen abzurufen, die bestimmten Kriterien entsprechen:

Verwenden Sie simulierte benutzerdefinierte Funktionen (UDF)

Für kleine bis mittelgroße Tabellen können Sie eine Schein-UDF verwenden, um Randomisierungsvorgänge auf Datenbankebene durchzuführen. Definieren Sie im Datenkontext eine Teilklasse und fügen Sie die folgende Methode hinzu:

partial class MyDataContext {
     [Function(Name="NEWID", IsComposable=true)] 
     public Guid Random() 
     {
         throw new NotImplementedException(); 
     }
}
Nach dem Login kopieren

Obwohl diese UDF nicht tatsächlich im C#-Code implementiert ist, wird sie von SQL Server verwendet, um eine zufällige Reihenfolge durchzuführen. Um zufällige Zeilen basierend auf einer Bedingung abzurufen, verwenden Sie die folgende Abfrage:

var cust = (from row in ctx.Customers
           where row.IsActive // 您的筛选条件
           orderby ctx.Random()
           select row).FirstOrDefault();
Nach dem Login kopieren

Zählungsbasierte Methode

Bei großen Tabellen kann ein zählbasierter Ansatz effizienter sein. So funktioniert es:

  1. Verwenden Sie qry.Count(), um die Gesamtzahl der Zeilen zu berechnen.
  2. Generieren Sie einen Zufallsindex im Bereich von 0 bis -1.
  3. Verwenden Sie qry.Skip(index).FirstOrDefault(), um die Zeile an einem zufälligen Index abzurufen.

Diese Methode umfasst zwei Roundtrips zur Datenbank, lässt sich jedoch besser mit der Tabellengröße skalieren als die Verwendung einer Zufallssortierfunktion.

Das obige ist der detaillierte Inhalt vonWie kann ich zufällige Zeilen aus einer Datenbank mit LINQ nach SQL effizient abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage