加入收藏 | 设为首页 | 会员中心 | 我要投稿 大同站长网 (https://www.0352zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

利用虚拟硬盘(把内存当作硬盘)来提高数据库的效率

发布时间:2016-09-05 23:52:36 所属栏目:MsSql教程 来源:站长网
导读:(目前只针对SQL Server 2000)可以提高很多 虚拟硬盘:就是把内存当作硬盘来用,比如有2G的内存,那么可以拿出来1G的内存当作硬盘来用。 自从知道了虚拟硬盘这
(目前只针对SQL Server 2000)可以提高很多

虚拟硬盘:就是把内存当作硬盘来用,比如有2G的内存,那么可以拿出来1G的内存当作硬盘来用。

自从知道了“虚拟硬盘”这个东东,我就一直在想如何才能把这个虚拟硬盘发挥到极致,上一篇也写 了一些简单的应用,当然提高的效率并不多,并不是很理想。我最想提高的是提高数据库的读取速度,也 就是提高分页效率。一开始是想把数据库文件放到虚拟硬盘里面,这样读取速度不就快乐吗?但是当我把 一个250万条记录的数据库放在了虚拟硬盘上做测试后,发现效果并不理想。

250万条记录,利用主键排序(聚集索引),可以提高几倍的效率,但是如果换成一般的字段 (nvarchar类型的,没有设置索引),查看第1000页的数据的时候居然超时了?!这个也太。。。还是“ 内存”了吗?无意间看了一眼硬盘指示灯,这个灯在显示数据的时候居然一直在亮!不会把,从虚拟硬盘 里面读数据,硬盘灯为什么会亮呀?看来SQL Server2000在大量数据排序的时候会往硬盘里面写数据。查 看了一下发现SQL Server2000会往Tempdb数据库里面写数据,居然写了100多M的数据,看来这是照成超时 的原因了。

那么能不能把Tempdb换到虚拟硬盘里面呢?一开始用了一个笨着,竟然把SQL Server2000给弄死了, 害得我重装了一遍。后来才发现,有现成的SQL语句可以使用。好了现在可以改Tempdb的位置了,再来测 试一遍。这回效果比较理想,翻到第5000页,花费了11秒多,没有超时。

USE master
Go
ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME =  't:datatempdb.mdf')
Go
ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME =  't:datatemplog.ldf')
Go

Tempdb数据库里并不会存放重要数据,丢掉了也不会有什么大问题,只需要在重启计算机后把文件拷 贝过去就可以了,代价不大,效率却可以提高很多,有减少了硬盘的读写次数,保护了硬盘嘛,应该是一 个很好的方法。

测试的具体情况:

SQL Server 2000 ,Northwind数据库里的Products表,表里面有2523136条记录数,每页15条记录, 共168210页。

ProductID 字段是主键,聚集索引,其他字段都没有索引。

1、使用颠倒Top的分页算法,按照ProductName,ProductID来排序。一开始比较慢,需要20多秒(需要 把数据读取到Tempdb),后来就快了一些,11秒左右。就是说翻到了第1000页、第 5000页只需要11秒左 右,硬盘灯也没怎么亮。第10000页,12秒。第十万页,22秒。(注意:这是250万条记录,按照nvarchar 字段排序的结果)

第99999页使用的SQL语句:

 select * from Products where productid in
   ( select top 15 productid from
     ( select top 1499985 productname,productid from Products
         order by productname,productid ) as t
      order by t.productname desc,t.productid desc )

order by productname,productid

(编辑:大同站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读