我只是编写一个测试应用程序,以确定如何优化对大量记录的搜索,以便在gridview中显示。
目前,我有一个包含20,000条记录的测试表(目前没有索引),我希望在gridview中以20个批量显示记录。我不确定如何做到这一点,我正在努力理解它背后的理论。
namespace TestingIndexes
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnStart_Click(object sender, EventArgs e)
{
gvResults.DataSource = GetContacts();
gvResults.DataBind();
}
private List<Contact> GetContacts()
{
List<Contact> contacts = new List<Contact>();
DataClasses1DataContext dc = new DataClasses1DataContext();
// Track time elapsed
Stopwatch sw = new Stopwatch();
sw.Start();
var result = from c in dc.GetTable<Contact>()
select c;
sw.Stop();
ltMessage.Text = "<p>Time elapsed: " + sw.ElapsedMilliseconds + "</p>";
if (result.Count() > 0)
contacts = result.ToList<Contact>();
return contacts;
}
}
}
正如您所看到的,这是一个使用LINQ的非常简单的查询,我非常确定我不希望每次将20,000条记录带入内存以便将其绑定到gridview。有什么选择呢?我想我想要做的是最终查询数据库以查找有很多记录,但之后在gridview中一次只显示20条记录。这是由SQL Server处理的吗?我肯定必须有关于我正在尝试做什么的文章,但我不完全确定我应该寻找什么。任何教程的指针或链接都会非常有用!
任何人都可以帮我指出正确的方向吗?
答案 0 :(得分:4)
您应该使用Skip
和Take
从数据库表中获取部分数据。
var result = dc.GetTable<Contact>().Skip(40).Take(20).ToList();
答案 1 :(得分:0)
首先,last和allways在表上构建一个(聚集的)索引理想情况下,索引也包含您想要返回的行。如果你没有,那么SQL将逐步完成所有记录。如果覆盖索引到位,SQL将只访问索引。如果你想了解SQL,那么可能没有比http://www.sqlserverinternals.com/ Kalen Delaney更好的资源了。 “覆盖索引”以及更多内容都清晰地解释,甚至对她书中的内容的肤浅理解也会让你成为一个更好的开发者哦,而http://en.wikipedia.org/wiki/Database_index