我正在ASP.NET中开发一个Web应用程序,在一个页面上我正在使用带分页的ListView。作为一个测试,我填充了它从600万行中抽取的表。
该表和基于它的模式绑定视图具有所有必需的索引,并在SQL Server Management Studio中执行查询,其中SELECT TOP 5返回<如预期的那样1秒。
但是在ASP.NET页面上,使用相同的查询,似乎没有任何限制地选择所有600万行。分页控制不应该限制查询只返回N行而不是整个数据集吗?如何使用这些ASP.NET控件来处理包含数百万条记录的大量数据集?对于ListView,SELECT [columns] FROM [tablename]
是否真的意味着它并不实际注入TOP <n>
并且在应用程序级别而不是数据库级别执行所有分页?
答案 0 :(得分:0)
启用分页时,分页控件,数据源,网格等将限制控件显示的行数。但是,它们肯定不会限制SELECT语句返回的行数。
您应该使用DataObjectSource作为控件的数据源,并让它调用一个类方法来执行只返回必要行的SELECT语句。否则,你的表现会很糟糕。
不幸的是,SQL Server不支持任何类型的RANGE子句,并且所需的SQL不是很漂亮。但这绝对是必要的。
http://www.asp.net/data-access/tutorials/efficiently-paging-through-large-amounts-of-data-cs