我有一张包含13K记录的表和一台旧的sql机。
在有问题的页面中,我有一个netTiers数据源,该数据源超时。
我的问题是在page_load设置过滤器:
vwImmobileCommessaAttivoDataSource.Filter = "ImmobileId = '" + Request.QueryString["ImmobileId"] + "'";
将结果编号从13K更改为10。
但是我看到生成查询是:
BEGIN
SELECT * FROM [dbo].[vwImmobileCommessaAttivo]
ORDER BY [CommessaId]
-- get total count
SELECT @@ROWCOUNT AS TotalRowCount;
END
没有过滤器,并且超时。
有没有一种方法可以加速查询?包括我的过滤器?
答案 0 :(得分:0)
我个人使用DevExpress网格并使用类似以下内容的方法直接绑定到它们:
grid.DataSource = new vwImmobileCommessaAttivoService().Find(string.format("ImmobileId='{0}'", Request.QueryString["ImmobileId"]));
grid.DataBind();
如果您的过滤器仅会使您从13k下降到10k,并且您将在13k条记录上超时,那么我认为您将需要研究某种形式的分页选项以返回较少的记录。如果启用了SQL2005功能,则内置一些分页功能,但是我从未亲自尝试过它,因此我不知道它的效果如何。默认的Nettiers分页仍然从sql获取所有记录,并在内部进行分页。
就您现有的代码而言,实际上可以达到您的期望。仅当EnablePaging和EnableSorting都设置为false时,.Filter才起作用。您是否尝试过:
vwImmobileCommessaAttivoDataSource.SelectMethod = vwImmobileCommessaAttivoSelectMethod.Find;
vwImmobileCommessaAttivoDataSource.WhereClause = "ImmobileId = '" + Request.QueryString["ImmobileId"] + "'";