问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

sql为什么没有物理读和一致读

发布网友 发布时间:2022-05-03 18:18

我来回答

3个回答

懂视网 时间:2022-05-03 22:40

SQL SERVER数据存储的形式


      在谈到几种不同的读取方式之前,首先要理解SQL SERVER数据存储的方式.SQL SERVER存储的最小单位为页(Page).每一页大小为8k,SQL SERVER对于页的读取是原子性,要么读完一页,要么完全不读,不会有中间状态。而页之间的数据组织结构为B树(请参考我之前的博文).所以SQL SERVER对于逻辑读,预读,和物理读的单位是.

      1

      SQL SERVER一页的总大小为:8K

      但是这一页存储的数据会是:8K=8192字节-96字节(页头)-36字节(行偏移)=8060字节

      所以每一页用于存储的实际大小为8060字节.

      比如上面AdventureWorks中的Person.Address表,通过SSMS看到这个表的数据空间为:

      2

      我们可以通过公式大概推算出占用了多少页:2.250*1024*1024/8060(每页的数据容量)≈293 - 表中非数据占用的空间≈290(上图中的逻辑读取数)

 

SQL SERVER查询语句执行的顺序


      SQL SERVER查询执行的步骤如果从微观来看,那将会非常多。这里为了讲述逻辑读等概念,我从比较高的抽象层次来看:

      3

      图有些粗糙。

      下面我解释一下图。当遇到一个查询语句时,SQL SERVER会走第一步,分别为生成执行计划(占用CPU和内存资源),同步的用估计的数据去磁盘中取得需要取的数据(占用IO资源,这就是预读),注意,两个第一步是并行的,SQL SERVER通过这种方式来提高查询性能.

      然后查询计划生成好了以后去缓存读取数据.当发现缓存缺少所需要的数据后让缓存再次去读硬盘(物理读)

      最后从缓存中取出所有数据(逻辑读)。

      下面我再通过一个简单的例子说明一下:

      4

      这个估计的页数数据可以通过这个DMV看到:

 

    6

 

    当我们第一次查询完成后,再次进行查询时,所有请求的数据这时已经在缓存中,SQL SERVER这时只要对缓存进行读取就行了,也就是只用进行逻辑读:

    7

热心网友 时间:2022-05-03 19:48

有两种读:逻辑读和物理读
数据库读写的单位是数据块。当用户最终得到的结果可能只是某个数据块中的几行或几列。当一个查询语句被执行时,服务器进程会将相关的数据块从数据文件中写入内存(buffer cache)。这就叫做物理读。每读取一个数据块,即是一次物理读。

而用户需要的并不是整个数据块,而是其中的几行或几列。从buffer cache中提取行的过程,便是逻辑读。

热心网友 时间:2022-05-03 21:06

因为这是数据库做的事情,不是sql的事情。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
LOL9.20版本余震辅助狗熊怎么玩_9.20版本余震辅助狗熊玩法攻略_百度... 英雄联盟的狗熊怎么出装 英雄联盟狗熊的出装 张医师你好,我干喷漆的工作没几天手指就好痒是什么原因啊? ...疼,就是又疼又痒的感觉!请问是怎么回事?怎么治! ...白酒和啤酒后第二天发现手掌痒,然后按的话有点疼,以前没有出现过这种... 芦苇有哪些用处 芦苇有哪些用途 芦苇多少用处 乾安1.2.3.4.5路公交车路线图 求一ASP 的SQL 储存过程分页代码(存储代码跟调用代码) 关于sql server 2005备份数据库的问题 sql server 2005数据同步 请高手指导下SQL Server2005可以用脚本实现数据库同步吗?如果可以,怎么实现呢? SQL 怎么利用游标做加法 各位大哥大姐,小弟sql游标使用方法视频教程,借个光,照亮全世界啊! 教你怎么使用sql游标实例分享 C#能否通过自定义class来调用SQLServer中的存储过程来完成数据的操作? 30分求asp.net(C#)数据库操作的类 代码(更新,删除,查找= =) c#连接sqlserver数据库类怎么使用 求C++操作SQL Server数据库的源码文件 如何用SQL语句查询数据库中有内容的表名? sql查询数据,并将数字合并,求查询语句 sql语句,按年度查询循环查询一到十二月的汇总表,那位高手帮我写一个例子啊???? 多条sql语句同时执行,返回的数据源问题 怎么用一条sql语句同时查出所有数据和数据的条数呢 sql语句,关联2个表的数据!请看下面: sql语句怎么整合在一起?我有好几个这样的语句怎么整合在一起,查询出图片的结果。。 sql如何批量修改指定列值 如何用SQL批量修改表里一列的值 如何优化 物理读的sql 如何减少逻辑读 sql server read by other session与逻辑读高的SQL有关系吗? SQL的触发器源代码 谢谢了 SQL 图书馆系统数据库触发器代码 SQL中如何查看触发器的原代码? 求一个SQL触发器代码 如何在sql数据库中查找触发器的代码 sql sever 查找数据里都有那些符号 ACCESS中,有没有SQL语句查询获得表名和字段名 sql语句查询较慢时,应该怎么样分析? SQL Server 2000 中数据库文件如何压缩啊? 关于ldf日志文件大小如何减少 怎样sql server 2008中数据库备份压缩 sql语句执行原理 sql语句执行过程中会解析成二进制位被计算机识别吗?在哪一个阶段被解析的? 关于sqlserver 的一个查询, 解决再加50分 用sqlserver 怎样查询出 数据表里 某月上班连续打卡15天的人 如何查找sqlserver的sa密码 不知道我的windows7旗舰版32位操作系统是否与SQLserver2005兼容?