2015-02-08 22 views
1

我有一個問題,不知道如何解決這個問題在SQL Server 2012中,排序表萬行中的LINQ連接

我有表500萬行記錄(ID,鏈接), 但是當我查詢select N row顯示錯誤"Request timed out."

代碼:

public void _Read() 
{ 

    LinQDataContext _DB = new LinQDataContext(); 

    var _img = _DB.HotelImages.Where(o => o.ID_Hotel == Hotel_DA.ID_Hotel); 

    string _imghtml = ""; 
    foreach (var item in _img) 
    { 
     _imghtml = _imghtml + "<a href=''><img src='" + item.Url_Image + "' alt=''></a>"; 
    } 

} 
+0

你在調用哪個代碼時選擇N行? – 2015-02-08 04:53:36

+0

您的表格是否已編入索引?此查詢返回多少條記錄?此外,Web請求是否超時,還是Sql Server請求? – Scottie 2015-02-08 04:55:52

+0

當我選擇返回隨機記錄,網絡和SQL服務器 – amirlol 2015-02-08 04:55:59

回答

4

覆蓋索引只用取合併所需的色譜柱(如已經建議的)將導致最佳的性能改進:

指數:

CREATE INDEX IX_ID_Hotel ON YourTable(ID_Hotel) 
INCLUDE (Url_Image) 

你還應該確保你的上下文被處置。我建議你使用字符串生成器而不是串聯字符串。

string html; 
var builder = new StringBuilder(); 
using (LinQDataContext _DB = new LinQDataContext()) 
{ 

    var urls = _DB.HotelImages.Where(o => o.ID_Hotel == Hotel_DA.ID_Hotel) 
       .Select(x => x.Url_Image); 

    foreach (var url in urls) 
    { 
     builder.Append("<a href=''><img src='") 
       .Append(url) 
       .Append("'") 
       .Append("alt=''></a>"); 
    } 
} 
html = builder.ToString(); 
2

您正在獲取完整HotelImage對象。也許他們也包含斑點?您應該縮小您從數據庫中選擇Url_Image獲取數據,因爲這是你使用的唯一屬性:

var _img = _DB.HotelImages.Where(o => o.ID_Hotel == Hotel_DA.ID_Hotel) 
       .Select(x => x.Url_Image); 

然後

_imghtml = _imghtml + "<a href=''><img src='" + item + "' alt=''></a>";