2017-06-20 77 views
0

我有一個PetaPoco查詢,它使用WhereIn。查詢如下所示:MSSQL PetaPoco Large查詢優化的地方

 var prodAttrCollForVariantSql = new Sql(); 
     prodAttrCollForVariantSql.Select("*") 
      .From<ProductVariant2ProductAttributeDto>() 
      .InnerJoin<ProductAttributeDto>() 
      .On<ProductVariant2ProductAttributeDto, ProductAttributeDto>(left => left.ProductAttributeKey, right => right.Key) 
      .WhereIn<ProductVariant2ProductAttributeDto>(x => x.ProductVariantKey, variantKeys); 

問題是,「變異鍵」是一個列表,可以有任何從100到5000+的東西。

我如何可以提高性能,並且其中在上面的查詢潛在的侷限性?

回答

0

SQL Server具有2100個參數限制。

要解決該問題,只需將該列表分成2000個項目的塊。 實施例:

var Result = new List<Whatever>(); 
for (int i = 0; i < variantKeys.Count(); i+= 2000) { 
    Result.AddRange(db.Fetch<Whatever>("SELECT * FROM Whatever WHERE ID IN (@0)", variantKeys.Skip(i).Take(2000))); 
}