私はWebベースのストアアプリケーションを構築しており、相互にネストされた多くのサブカテゴリを処理する必要があります。重要なのは、スクリプトが数千を処理するかどうかわからないことです(新しいシステムが古いシステムに置き換わるため、予想されるトラフィックを把握しています)。現在、ローカルサーバーからの応答の遅れは1〜2です。他のページよりも数秒多く、さまざまなカテゴリに約30の製品が追加されています。
私のコードは次のとおりです。
BazaArkadiaDataContext db = new BazaArkadiaDataContext();
List<A_Kategorie> Podkategorie = new List<A_Kategorie>();
public int IdKat { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
List<A_Produkty> Produkty = new List<A_Produkty>(); //list of all products within the category and remaining subcategories
if (Page.RouteData.Values["IdKategorii"] != null)
{
string tmpkat = Page.RouteData.Values["IdKategorii"].ToString();
int index = tmpkat.IndexOf("-");
if (index > 0)
tmpkat = tmpkat.Substring(0, index);
IdKat = db.A_Kategories.Where(k => k.ID == Convert.ToInt32(tmpkat)).Select(k => k.IDAllegro).FirstOrDefault();
}
else
return;
PobierzPodkategorie(IdKat);
foreach (var item in Podkategorie)
{
var x = db.A_Produkties.Where(k => k.IDKategorii == item.ID);
foreach (var itemm in x)
{
Produkty.Add(itemm);
}
}
//data binding here
}
}
List<A_Kategorie> PobierzPodkategorie(int IdKat, List<A_Kategorie> kat = null)
{
List<A_Kategorie> Kategorie = new List<A_Kategorie>();
if (kat != null)
Kategorie.Concat(kat);
Kategorie = db.A_Kategories.Where(k => k.KatNadrzedna == IdKat).ToList();
if (Kategorie.Count() > 0)
{
foreach (var item in Kategorie)
{
PobierzPodkategorie(item.IDAllegro, Kategorie);
Podkategorie.Add(item);
}
}
return Kategorie;
}
TMC; DR *
私の関数は、サブカテゴリ(に配置されている親カテゴリのPobierzPodkategorie
サブカテゴリ取得列)を再帰的に検索し、サブカテゴリIDを持つすべての製品を選択して、リストに追加します。カテゴリリストは別のショップサービスサーバーからダウンロードされ、外部サーバーが構造を変更する場合に備えて独自のID列を取得する必要があるため、データベース構造はかなり邪悪です。KatNadrzedna
IDAllegro
Produkty
カテゴリリストには30000を超えるエントリがあり、そのうちのいくつかには5つ以上の親があり、Webサイトにはメインカテゴリとサブカテゴリのみが表示されます(「下位」サブカテゴリはSOAPに接続された外部ショップで必要です)。
私の質問は
データベースにインデックステーブルを追加すると(カテゴリ123
はの親です1234
、12738
...)、パフォーマンスが向上しますか、それとも時間の無駄ですか?(APIのバージョンが変更されたときにインデックスを更新する必要がありますが、どのくらいの頻度で更新されるかわかりません)または、他の方法はありますか?
スクリプトを変更することは本番環境では不可能であり、dbエンジンが多くのリクエストをどのように処理するかわからないため、質問しています。これについて助けていただければ幸いです。
データベースはMSSQLです
*コードが多すぎます。読んでいない