令中国铁道出版社 9.2数据库查询泡 921SQ最优化 虽然 SQL Server会针对用户的 SQL Command进行 最优化,然而并不见得都是最优化。有时最优化还是 须以人工的方式来处理,例如 Customers数据表共有11 个字段,但是我们只用到其中的5个字段,于是偷懒的 程序设计员们会使用下面的 SQL Command写法: SELECT FROM Customers 或许,这个程序设计员还会向别人炫耀它的SQL Command最为简洁,其实殊不知他已经犯了大忌,因 为 SQL Server会将 Customers所有字段(1个)的数据,送 往IS上的AsP数据库对象,使得网络传输的数据量大 增,并大幅降低S和 SQL Server的处理速度。 11
11 9.2 数据库查询范例 • 9.2.1 SQL最优化 虽然SQL Server会针对用户的SQL Command进行 最优化,然而并不见得都是最优化。有时最优化还是 须以人工的方式来处理,例如Customers数据表共有11 个字段,但是我们只用到其中的5个字段,于是偷懒的 程序设计员们会使用下面的SQL Command写法: SELECT * FROM Customers 或许,这个程序设计员还会向别人炫耀它的 SQL Command 最为简洁,其实殊不知他已经犯了大忌,因 为SQL Server会将Customers所有字段(11个)的数据,送 往IIS上的ASP数据库对象,使得网络传输的数据量大 增,并大幅降低IIS和SQL Server的处理速度
令中国铁道出版社 9.2数据库查询泡 921SQ最优化 为解决上述的问题,我们提出的 SQL Command 如下: SELECT CustomerID, Company Name, ContactName ContactTitle City from customers 在本范例中的 Customers数据表共有91条记录数 据。第一个写法需要传输91×11个字段,而第二种写 法则只需要91×5个字段。若不计算字段的长度,第 二种写法约可节省6/11的数据量。因此可大幅减少网 络的数据传输量,提高网络主机及数据库主机的执行 性能
12 9.2 数据库查询范例 • 9.2.1 SQL最优化 为解决上述的问题,我们提出的SQL Command 如下: SELECT CustomerID, CompanyName, ContactName, ContactTitle, City FROM Customers 在本范例中的Customers数据表共有91条记录数 据。第一个写法需要传输91×11个字段,而第二种写 法则只需要91×5个字段。若不计算字段的长度,第 二种写法约可节省6/11的数据量。因此可大幅减少网 络的数据传输量,提高网络主机及数据库主机的执行 性能
令中国铁道出版社 9.2数据库查询泡 9,22数据分页的处理 对于数据量较小的able而言,一次显示所有的数 据是没有问题的,但是当数据量相当庞大的时候,要 将所有的数据一股脑儿显示在网页上,那可就万万不 行,因为当ASP在编辑HML的同时,系统就可能因为 数据量太大而发生 Timeout(超时)的问题。要解决这 问题,我们可以将数据分割成数页,每页显示若干记 录数据(例如每页只显示20条记录数据),并提供上、下 页或指定页数之査询方式例如国内的新浪、搜狐等网 站搜索引擎的做法),以避免用户久候网页或发生 Timeou的情形,并可大幅减少系统的负荷。 18
13 9.2 数据库查询范例 • 9.2.2 数据分页的处理 对于数据量较小的Table而言,一次显示所有的数 据是没有问题的,但是当数据量相当庞大的时候,要 将所有的数据一股脑儿显示在网页上,那可就万万不 行,因为当ASP在编辑HTML的同时,系统就可能因为 数据量太大而发生Timeout(超时)的问题。要解决这一 问题,我们可以将数据分割成数页,每页显示若干记 录数据(例如每页只显示20条记录数据),并提供上、下 页或指定页数之查询方式(例如国内的新浪、搜狐等网 站搜索引擎的做法),以避免用户久候网页或发生 Timeout的情形,并可大幅减少系统的负荷
令中国铁道出版社 9.2数据库查询泡 92,2数据分页的处理 数据分页的技巧是通过指定 RecordSet对象的 PageSize 属性来完成。当我们设置 PageSize的值之后,数据库对象 会自动将 Recordset的大小分为若千个Page。例如每页要 显示20条记录数据,则ASP的写法如下 Set rs= Server CreateObject("ADODB. Recordset") sql ="select from Customers order by customerID rsopen sql, conn, 3, 2 rs Page Size=20 设置每页显示记录数 在设置页面的大小以后,另外必须设置 AbsolutePage 的值,让数据库的指针自动移至对应的记录 AbsolutePagel的写法如下: rs absolute Page=2 设置目前处理范围(页数) 14
14 9.2 数据库查询范例 • 9.2.2 数据分页的处理 数据分页的技巧是通过指定RecordSet对象的PageSize 属性来完成。当我们设置PageSize的值之后,数据库对象 会自动将 RecordSet 的大小分为若干个 Page。例如每页要 显示20条记录数据,则ASP的写法如下: Set rs = Server.CreateObject("ADODB.Recordset ") sql = "Select * from Customers order by CustomerID" rs.open sql, conn, 3, 2 rs.PageSize = 20 ‘ 设置每页显示记录数 在设置页面的大小以后,另外必须设置AbsolutePage 的值,让数据库的指针自动移至对应的记录。 AbsolutePage的写法如下: rs.AbsolutePage = 2 ' 设置目前处理范围(页数)
令中国铁道出版社 9.2数据库查询泡 9,22数据分页的处理 Recordset在设置 AbsolutePage属性的值以后,数据 库第一条记录数据的地址将自动被改变,它的计算公式 如下: 第一条记录数据地址=( AbsolutePage-1)× PageSize+1 例如 AbsolutePage=2, Page Size=20,则第条记录 等于 Recordset中的第21条记录。它的计算公式如下: 第一条记录=(2-1)×20+1=21 15
15 9.2 数据库查询范例 • 9.2.2 数据分页的处理 RecordSet在设置AbsolutePage属性的值以后,数据 库第一条记录数据的地址将自动被改变,它的计算公式 如下: 第一条记录数据地址= (AbsolutePage – 1) × PageSize + 1 例如AbsolutePage = 2, PageSize = 20,则第一条记录 等于RecordSet中的第21条记录。它的计算公式如下: 第一条记录 = (2 – 1) × 20 + 1 = 21