今天在网上看到有人在讨论预读和物理读的区别,个人觉得物理读和预读都是IO操作,都是需要从磁盘中读取数据到内存,只是读取的时间有所不同,之后查了一下MSDN确认了这种想法。

预读是在生成执行的同时去做的,通过这种方式可以提高IO的性能。而物理读是当执行计划生成好后去缓存读取数据发现缺少数据之后才到磁盘读取。当所有数据都从缓存中可以读取就变成逻辑读。

下面举个例子:

LINEITEM 表中大概存储了600W数据,我们使用SET STATISTICS IO ON:

SET STATISTICS IO ON

SELECT COUNT(*) FROM LINEITEM

Table 'LINEITEM'. Scan count 3, logical reads 22328, physicalreads 3, read-ahead reads20331, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

重复执行这条语句看到预读已经变为0,因为所有的数据已经在缓存中了:

SELECT COUNT(*) FROM LINEITEM

Table 'LINEITEM'. Scan count 3, logical reads 22328, physicalreads 0, read-ahead reads 0,lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

对于预读的解释:

数据库引擎支持称为“预读”的性能优化机制。预读首先预测执行查询执行计划所需的数据和索引页,然后在查询实际使用这些页之前将它们读入缓冲区高速缓存。这样可以让计算和 I/O 重叠进行,从而充分利用 CPU 和磁盘。

预读机制允许数据库引擎从一个文件中读取最多 64 个连续页 (512KB)。该读取作为缓冲区高速缓存中相应数量(可能是非相邻的)缓冲区的一次散播-聚集读取来执行。如果此范围内的任何页在缓冲区高速缓存中已存在,当读取完成时,所读取的相应页将被放弃。如果相应页在缓存中已存在,也可以从任何一端“裁剪”页的范围。

关于预读可以参考MSDN: http://msdn.microsoft.com/zh-cn/library/ms191475.aspx

本文转自 lzf328 51CTO博客,原文链接:http://blog.51cto.com/lzf328/1022526

SQL Server 预读和物理读 的区别相关推荐

  1. mysql物理读和逻辑读,SQL Server中STATISTICS IO物理读和逻辑读的误区

    SQL Server中STATISTICS IO物理读和逻辑读的误区 人人知道,SQL Server中可以行使下面下令查看某个语句读写IO的情形 SET STATISTICS IO ON 那么这个下令 ...

  2. 初谈SQL Server逻辑读、物理读、预读

    前言 本文涉及的内容均不是原创,是记录自己在学习IO.执行计划的过程中学习其他大牛的博客和心得并记录下来,之所以想写下来是为了记录自己在追溯的过程遇到的几个问题,并把这些问题弄清楚. 本章最后已贴出原 ...

  3. 理解SQL SERVER中的逻辑读,预读和物理读

    在我的上一篇关于SQL SERVER索引的博文,有圆友问道关于逻辑读,预读和物理读的概念.我觉的还是写一篇博文能把这个问题解释清楚. SQL SERVER数据存储的形式 在谈到几种不同的读取方式之前, ...

  4. 浅谈SQL Server逻辑读、物理读、预读

    目录 (一)前言 (二)正文 1. SQL Server的数据存储方式 2. 剖析IO统计信息 (1)初识三读 (2)逻辑读.物理读.预读的关系 (3)看图理解[逻辑读].[物理读].[预读] (三) ...

  5. SQL --理解SQL SERVER中的逻辑读,预读和物理读

    本文转载自:https://www.cnblogs.com/CareySon/archive/2011/12/23/2299127.html 理解SQL SERVER中的逻辑读,预读和物理读 SQL ...

  6. 初谈逻辑读、物理读、预读

    前言: 该文并不全是本人原创,里面的某些原理来自于CareySon. SQL SERVER数据存储的形式 要理解逻辑读.物理读.预读这三个概念,先要搞懂SQL Server的数据存储方式. SQL S ...

  7. KingbaseES 逻辑读与物理读

    oracle数据库中逻辑读,物理读 数据访问方式:数据库少不了和操作系统进行数据交互,表数据最好的方式是从数据库共享池中访问到,避免发生磁盘IO,当然如果共享池中没有访问到数据就难免发生磁盘IO. 物 ...

  8. Oracle逻辑读,物理读

    逻辑读和物理读 当执行计划创建成功后,就可以执行类似于update这样的语句.第一步是要在缓存高速缓冲区中查找数据快,数据快包含了要更新的行片段信息.通过内存中一个叫做最近最小使用列表的结构去进行查找 ...

  9. SQL Server中Text和varchar(max)数据类型区别

    SQL Server中Text和varchar(max)数据类型区别 以前只知道text和image是可能被SQL Server淘汰的数据类型,但具体原因不太清楚,今天读书的时候发现了text与var ...

最新文章

  1. centos 安装redis
  2. magento 让某个页面开启SSL访问
  3. usb3.0 ssd 测试软件,当USB3.0遇上SSD,TB败得移动硬盘盒测试
  4. NIO介绍与Netty通信简单入门
  5. 单片机c语言编程RGB,C语言将raw data(rgb/rgba)写成bmp文件(bmp24或32)
  6. 多线程、方便扩展的Windows服务程序
  7. andorid之帧布局FrameLayout
  8. RHEL 5.7 Yum配置本地源[Errno 2] No such file or directory
  9. 牛客网—12.链表练习python解答
  10. 转 Spring是如何管理Hibernate和Struts的(二)
  11. jad的用法(反编译某目录下所有class)
  12. SQL数据库恢复挂起
  13. mysql union 慢_mysql查询慢的原因和解决方案
  14. 计算机兆的符号是什么意思,一兆等于多少kb流量?B,MB,KB,GB分别是什么意思?
  15. 微信小程序JSwxs获取当前时间戳
  16. 如何改变图片的尺寸大小得到一张缩小后的图片
  17. HTML5 新增的结构元素——能用不代表用对了
  18. [Unity] Catan Universe: Unity 的移动设备优化
  19. Qt编写带频谱的音乐播放器
  20. NFT Insider由WHALE社区、BeepCrypto联合出品,浓缩每周NFT新闻,为大家带来关于NFT最全面、最新鲜、最有价值的讯息。

热门文章

  1. php mvc开发系列教程第三节 Controller 类实现
  2. 领域研究热点的绝妙探索方法
  3. 科研人必备的学术导航,不看后悔!
  4. 人工智能-机器学习=深度学习-其他
  5. solidworks2018安装教程
  6. windows下利用sox批量将PCM转为WAV
  7. 前后端分离时代,Java 程序员的变与不变!
  8. java如何打logo,利用java给网站图片打上文本或图片logo
  9. 从民宅到独栋大厦 我们搬家啦!
  10. mxnet基础到提高(49)-使用免费的云jupyter