2015-02-08 23 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>";