ホームページ > バックエンド開発 > C++ > LINQを使用してデータベースからランダムな行をSQL​​に効率的に取得するにはどうすればよいですか?

LINQを使用してデータベースからランダムな行をSQL​​に効率的に取得するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-26 16:16:09
オリジナル
478 人が閲覧しました

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

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>
ログイン後にコピー

カウントベースのメソッド

大きなテーブルの場合は、カウントベースのアプローチの方が効率的である可能性があります。仕組みは次のとおりです:

  1. qry.Count() を使用して行の合計数を計算します。
  2. 0 から count -1 までの範囲でランダムなインデックスを生成します。
  3. ランダムなインデックスで行を取得するには、qry.Skip(index).FirstOrDefault() を使用します。

この方法にはデータベースへの 2 往復が必要ですが、ランダムな並べ替え関数を使用するよりもテーブル サイズに合わせて拡張できます。

以上がLINQを使用してデータベースからランダムな行をSQL​​に効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート