整理的几条MSSQL的分页办法和优化方案
by 尘缘 on 九月 18th, 2009 // Filed Under → SQL Server 2008
接触Asp不到半年,就投靠到PHP麾下,致使有两年编程经验的我,最薄弱的地方就是Asp+MSSQL,今天才发现,Asp终于被我彻底忘得一干二净了。
MSSQL不像MySql那样,可以使用LIMIT直接获取想的记录,仅需要指定开始的ID和想获取的条数即可。MSSQL的分页实现起来倒真是颇费周折。
这两天研究的内容,不是如何写分页类,而是分页的SQL的优化。
以下是搜集的几个不错的优化方案。
1,查询TOPA条记录,然后将记录集倒序,从中再查询TOPB条数据,就可以得到分前分页的记录,最后,可以再将记录集倒序一下,以实现正常排序。
示例SQL如下:
SELECT * FROM (SELECT TOP 2 * FROM (SELECT TOP 10 * FROM news_info WHERE (classid = '012') ORDER BY id) DERIVEDTBL ORDER BY id DESC) DERIVEDTBL ORDER BY id
PS:刚刚去装了SyntaxHighlighter这个代码高亮插件,效果真赞。
哦,这里记录一下,在MS SQLServer 2000/2005中 用derivedtbl 表示临时表(被推导出来的表),就不用再As来As去了。这种方式看起来复杂,实际上却不复杂,把三个括号打开就看得明白。这种方式比较常见于不同的排序列表页。
2,还有一种方式就是mssql_data_seek,这样的PHP函数来实现,简单来说,和上面的实现的原理,就是把指针直接移动到我们需要的这个起始ID上,个人觉得,貌似这样的效率要比第一点高一些。
以下给出一个代码片段。
总的看来,简单易用,效率估计比较高,麻烦的在于,PDO中好像不支持,找半天也没找见类似的函数,So,只能用第一条办法解解急。在这里急盼高手指点呐。
$query = "select top 100 * from news order by id asc";
mssql_data_seek($query,$移动指针到这个ID);
你可以任意转摘“整理的几条MSSQL的分页办法和优化方案”,但请保留本文出处和版权信息。
作者:尘缘,QQ:130775,来源:http://www.4wei.cn/archives/1000190

走过路过,千万不要飞过,那是鸟人: