LINQ to SQL の効率的なランダム行取得
LINQ to SQL を使用してデータベースからランダムな行を取得する場合、クライアント側のフィルタリングとランダム化に依存すると、パフォーマンスの問題が発生する可能性があります。次のメソッドは、特定の条件に一致するランダムな行を効率的に取得する方法を提供します:
シミュレートされたユーザー定義関数 (UDF) を使用する
小規模から中規模のテーブルの場合、モック UDF を使用してデータベース レベルでランダム化操作を実行できます。データ コンテキストで、部分クラスを定義し、次のメソッドを追加します:
<code class="language-csharp">partial class MyDataContext { [Function(Name="NEWID", IsComposable=true)] public Guid Random() { throw new NotImplementedException(); } }</code>
この UDF は、実際には C# コードに実装されていませんが、SQL Server によってランダムな順序付けを実行するために使用されます。条件に基づいてランダムな行を取得するには、次のクエリを使用します:
<code class="language-csharp">var cust = (from row in ctx.Customers where row.IsActive // 您的筛选条件 orderby ctx.Random() select row).FirstOrDefault();</code>
カウントベースのメソッド
大きなテーブルの場合は、カウントベースのアプローチの方が効率的である可能性があります。仕組みは次のとおりです:
qry.Count()
を使用して行の合計数を計算します。 qry.Skip(index).FirstOrDefault()
を使用します。 この方法にはデータベースへの 2 往復が必要ですが、ランダムな並べ替え関数を使用するよりもテーブル サイズに合わせて拡張できます。
以上がLINQを使用してデータベースからランダムな行をSQLに効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。