上一篇:让你的笔记本更快一点——我的笔记本的性能测试和虚拟硬盘(把内存当成硬盘)的使用感觉

虚拟硬盘:就是把内存当作硬盘来用,比如有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:\data\tempdb.mdf')
Go
ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 't:\data\templog.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

2、使用Max分页算法,按照主键(ProductID)字段排序。这个就非常快了,10000页以内都是0毫秒到32毫秒,第五万页是200毫秒左右,第十万页是300多毫秒,第十六万页(快到最后了)是600毫秒左右。可以用秒杀来形容了。

第1600000页使用的SQL语句:

select top 15 * from Products 
where productid>= 
  (SELECT max(productid ) from 
     (select top 2399986 productid from Products order by productid ) as t )

order by productid

2.1、同样的条件下,如果Tempdb放在物理硬盘里面的话,速度慢很多。下面是测试数据。(使用Max分页算法,按照主键(ProductID)字段排序)

页号 时间:毫秒
第1页 156
第2页 15
第10000页 1390
第10001页 47
第140000页 8391
第140001页 546
第160000页 1766
第160001页 600

注意:这里并不是想说分页算法如何如何的快,而是想说,对于SQL Server2000来说,如果把Tempdb数据库的文件(tempdb.mdf)放在虚拟硬盘里面,可以提高很大的效率!至于SQL Server 2005还没有测试。

利用虚拟硬盘(把内存当作硬盘)来提高数据库的效率(目前只针对SQL Server 2000)可以提高很多...相关推荐

  1. 利用Navicat Premium将SQL Server数据库转为My SQL数据库(解决Mac无法打开SQL Server 脚本文件的方法)

    利用Navicat Premium将SQL Server数据库转为My SQL数据库(解决Mac无法打开SQL Server 脚本文件的方法) 安装好Navicat Premium,SQL Serve ...

  2. 服务器的内存和硬盘哪个更重要,[内存与硬盘区别] 内存和硬盘哪个重要

    内存就是存储程序以及数据的地方,比如当我们在使用WPS处理文稿时,当你在键盘上敲入字符时,它就被存入内存中,当你选择存盘时,内存中的数据才会被存入硬(磁)盘.在进一步理解它之前,还应认识一下它的物理概 ...

  3. 深入SQL SERVER 2000的内存管理机制

    http://www.cnblogs.com/softj/articles/243591.html 转载于:https://www.cnblogs.com/zengkefu/p/6713169.htm ...

  4. 常见SQL Server 2000漏洞及其相关利用2

    转自:http://blog.sina.com.cn/s/blog_5070b2cd01008blt.html 要***主机IP:192.168.11.56 前提是: 1.对方主机有安装SQL ser ...

  5. SQL Server 性能调优(内存)

    存储引擎自调整 sql server 是如何分配内存的 32bit地址空间的限制 用户模式vas分配和virtualalloc 非boffer pool 分配内存(保留内存) VAS调整 AWE 启动 ...

  6. 联想拯救者y7000p加内存条_怎么给笔记本升级内存和硬盘 联想Y7000P加装内存和硬盘图文介绍...

    一般目前新买的笔记本电脑,大都是标配8GB内存和单块固态硬盘,内存和硬盘容量适中,但对于一些制图设计.偏大型游戏,又或者对硬盘存储要求比较高的用户来说,显然就不太够用,这时候我们一般会通过升级内存和硬 ...

  7. 为什么换了固态硬盘电脑会快?详解硬盘与内存的关系

    正文部分: 首先我们需要先梳理一下内存与硬盘的关系,这里的内存和手机的有很大的区别,所以从这里开始你需要把对于手机内存认知的那一套全部抛到脑后,否则你会被干扰. [人类的思考] 我们的大脑需要思考某件 ...

  8. 【为什么换了固态硬盘电脑会快?详解硬盘与内存的关系】

    前言: 不少人说电脑卡顿,我的推荐都是换个固态,把系统安装到固态里就不卡了,很多人不信啊,觉得换个硬盘电脑就能变快了?这么神奇么,所以今天我们就来详细了解一下,为什么换了固态硬盘系统会变快,以及把软件 ...

  9. 联想拯救者y7000p加内存条_笔记本怎么升级内存和硬盘 联想Y7000P加装内存和硬盘图文教程 (全文)...

    一般目前新买的笔记本电脑,大都是标配8GB内存和单块固态硬盘,内存和硬盘容量适中,但对于一些制图设计.偏大型游戏,又或者对硬盘存储要求比较高的用户来说,显然就不太够用,这时候我们一般会通过升级内存和硬 ...

最新文章

  1. iBATIS In Action:使用映射语句(一)
  2. django 完整日志配置
  3. CocoaPods 安装与使用教程
  4. 汇总运行在Hadoop YARN上的开源系统
  5. JPA的entityManager的find方法与getReference方法的区别
  6. ABAP,Java和JavaScript的序列化,反序列化
  7. INTEL和AMD两大巨头的前身
  8. 基于java+swing+mysql+JFeeChart的企业人力资源管理系统(2)续
  9. php判断直线相交,zoj 1158 判断2线段完全相交
  10. RX库中的IDisposable对象
  11. ubuntu中如何查看系统信息(uname)
  12. HDU 2609 最小表示法
  13. tecplot360的宏命令
  14. 2021最新!某盘加速下载工具复活了,无需登录,打开即可高速下载(附下载)!
  15. 每日英语--Week10
  16. linux 防火墙firewall规则策略
  17. STM32F446高性能MCU芯片介绍
  18. 无线视频监控系统设计
  19. 30个值得收藏可免费搜索/下载PDF电子图书(文档)的搜索引擎
  20. java语言获取数据库中的表的总行数

热门文章

  1. java自定义表单系统_表单识别:自定义表单模板无需额外定制
  2. linux软件包管理工具,Linux 软件包管理器-----yum配置详解一
  3. python telnet 交互_Python判断telnet通不通的实例
  4. java windows域_域环境中的windows软件安装
  5. JAVA反射机制及其原理实现
  6. Linux常用命令大全--有关磁盘空间的命令
  7. JVM插码之六:jacoco插码及问题“$jacocodata 属性 Method not found: is$jacocoData”
  8. php完整验证码代码
  9. 在控制台中录入学生姓名(python)
  10. 个人成长:2021如何成为更好的自己?