** DotNet ** ** 环境下 ** ** SQLServer ** ** 的分页测试 ** ** **
周运智
在 .Net Framework 支持的多种应用程序 Windows Application 、 Web Application 、 Web Service 、 Windows Service 中,前三者都或多或少地与数据库访问有关。在需要访问数据量巨大的表的时候,如何读取其中的有效的数据就成了影响这些程序,特别是 Web Application 和 Web Service 的执行效率关键所在。
分页技术使应用程序可以将大量的数据以更方便的方式展现给用户。分页技术的实现方法有多种,我们今天讨论的 .Net 环境本身就提供了可以用来进行数据分页的相关技术,如 ASP.Net 中常用的 DataGrid 控件自带的分页、 DbDataAdapter 配合 DataSet 的分页;而数据库本身一般也可以通过编写适当的 SQL 语句来实现分页的查询。但是这些分页技术的效率如何呢?
1 . DataGrid 控件的分页是对其数据源 DataSource 中的数据集合进行分页。要使用其分页功能,必须将所有可能的数据读入内存(通常存于一 DataSet 对象中),赋给 DataGrid.DataSource 。因此,显然在数据量巨大的时候直接使用 DataGrid 的分页功能并不适合(但可使用 DataGrid 页面索引机制,通过设置 VirtualItemCount 、 PageSize 等属性,以及处理 PageIndexChanged 时间来实现页面索引的功能,具体实现不在本文讨论之列)。
2 . DbDataAdapter 配合 DataSet 的分页方式用以下方式获取所需的记录。
_ comm . CommandText ="select * from MyTable order by id"; _
_ comm . CommandType = CommandType . Text ; _
_ Sql DataAdapter adapter = new SqlDataAdapter ( comm ); _
_ adapter . Fill ( ds , startRecord , maxRecords , "Table"); _
虽然其仍需要查询所有的可能记录,但是只需读取其中需要的一小部分,无疑和上述的依赖 DataGrid 的分页方法有巨大的改进。
3 .使用 SQL 进行分页查询依赖于数据库。不同的数据库由于具有不同的程度的 SQL 扩展特性,其 SQL 分页的实现也各不一样。但是与第二类分页方法相比, SQL 分页也只需读取所需的一小部分数据。
为了对第二类第三类分页方法的效率有更清晰的认识,我对两种方法分别在 10 万、 25 万、 50 万、 75 万、 100 万、 250 万、 500 万、 750 万、 1000 万、 <span style='font-siz