iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >如何深入理解Sql Server中的表扫描
  • 701
分享到

如何深入理解Sql Server中的表扫描

2024-04-02 19:04:59 701人浏览 薄情痞子
摘要

如何深入理解SQL Server中的表扫描,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  很久

如何深入理解SQL Server中的表扫描,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

  很久以前我们在写sql的时候,最怕的一件事情就是sql莫名奇妙的超级慢,慢的是撸一管子回来,那个小球还在一直转。这个着急也只有当事人才明白,后来听说有个什么“评估执行计划“,后来的后来才明白应该避免表扫描。

一:表扫描

1.现象

  ”表扫描“听起来很简单,不就是一行一行的扫嘛,你要说”执行计划”的话,我也会玩,为了更可观,我build一个表,再插入三行数据,如下图:

上面的Person我是一个索引都没建,然后where一下,看看表扫描是啥样的???

果然是看到了万恶的“表扫描”三个字,既然是万恶的东西,我们一定要深刻了解下,然后我们才可以怎么去想办法避免它。所以我们一定要理解到本质,那问题来了,它到底是怎么扫的呢???怎么破呢?这个还必须得从数据页说起。

二: 深刻理解表扫描

1:数据页

  这个学sqlserver的没有理由说不知道,我们的记录都是以数据页形式存储的,而且还应该知道数据页的大小是8k。那数据页在哪里?我可以

让你眼见为实。

乍一看我画了好多,千万不要怕,不要以为画的多,就以为高深了。。。我简单的剖析下。

<1>:dbcc ind 命令

 你要是想看数据页的相关情况,sqlserver还真提供了专用命令dbcc 满足你,你可能会问sqlserver中有提供ind命令的参数吗?告诉你吧,还真有

的,不过这个要开启2588跟踪,就像下面这样。

<2>:PageFID,PagePID,IAMFID

  刚才也说了,数据页有很多种,默认说的都是表数据页,其实还有IAM数据页,没什么稀奇的,IAM就是用来跟踪表数据页的,所以上面的图中,IAMFID字段为Null的记录就是IAM页,下面的PagePID=78的,就是表数据页。

2.查看数据页

为避免大家糊涂了,我先还是说说数据页内部结构大概是个什么样子,好让大家有个整体印象。

 从图中可以看到,在数据页的尾部是有很多槽位的,这些槽位指向了Data区域中一条条实际记录的地址,所以说表扫描,其实就是扫这些Slot槽位,

还是拿上面的Person表中的三条记录来说,他们都是保存在78号数据页中,现在出于好奇心把78号数据页导出来,说干就干。很简单,你需

要做两件事情:

<1>开启3604跟踪: dbcc traceon(3604)

<2>使用dbcc page 命令导出1号文件下面的78号数据页(pageFID:pagePID)=(1:78),就像下面这样。

数据页头(PAGE HEADER):

数据内容(Page Data):

数据槽位(Page Slot):

有没有看到上面(0,1,2)三个槽位,并且都有相应的偏移地址(0x7e,0x92,0xba),这个地址就指向了Data区域实际记录的偏移地址。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网数据库频道,感谢您对编程网的支持。

您可能感兴趣的文档:

--结束END--

本文标题: 如何深入理解Sql Server中的表扫描

本文链接: https://www.lsjlt.com/news/69009.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何深入理解Sql Server中的表扫描
    如何深入理解Sql Server中的表扫描,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  很久...
    99+
    2024-04-02
  • 如何避免全表扫描的sql优化
    这期内容当中小编将会给大家带来有关如何避免全表扫描的sql优化,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。对查询进行优化,应尽量避免全表扫描,首先应考虑在wher...
    99+
    2024-04-02
  • SQL Server子查询的深入理解
    当由where子句指定的搜索条件指向另一张表时,就需要使用子查询或嵌套查询。 1 子查询 子查询是一个嵌套在select、insert、update或delete语句或其他...
    99+
    2024-04-02
  • MySQL中的全表扫描和索引树扫描 的实例详解
    目录引言实例引言 在学习mysql时,我们经常会使用explain来查看sql查询的索引等优化手段的使用情况。在使用explain时,我们可以观察到,explain的输出有一个很关键...
    99+
    2024-04-02
  • 如何深入浅析SQL Server 触发器
    这篇文章将为大家详细讲解有关如何深入浅析SQL Server 触发器,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。触发器是一种特殊类型的存储过程,它不同于之...
    99+
    2024-04-02
  • 如何深入分析SQL Server Page结构
    这篇文章将为大家详细讲解有关如何深入分析SQL Server Page结构,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。SQL Server存储数据的基本单...
    99+
    2024-04-02
  • 如何理解SQL Server中的Forwarded Record
    今天就跟大家聊聊有关如何理解SQL Server中的Forwarded Record,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。存放原理在SQL ...
    99+
    2024-04-02
  • sql server中的任务调度与CPU深入讲解
    一. 概述 我们知道在操作系统看来, sql server产品与其它应用程序一样,没有特别对待。但内存,硬盘,cpu又是数据库系统最重要的核心资源,所以在sql server 2005及以后出现了SQLOS...
    99+
    2024-04-02
  • 深入理解SQL解析的内涵
    SQL解析:探究其背后的意义,需要具体代码示例引言:SQL(Structured Query Language)是结构化查询语言的缩写,是一种用于管理和操作关系型数据库的标准语言。作为一种强大的数据操作语言,SQL的解析是数据管理和查询的基...
    99+
    2023-12-28
    解析 (Parsing) SQL (Structured Query Language) 背后的意义 (underlyi
  • sql server创建表后如何输入数据
    要输入数据到SQL Server创建的表中,可以使用以下方法之一:1. 使用INSERT语句插入单行数据:```sqlINSERT ...
    99+
    2023-09-27
    sql server
  • 如何进行sql server性能调优 I/O开销的深入解析
    今天就跟大家聊聊有关如何进行sql server性能调优 I/O开销的深入解析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一.概述IO 内存是sq...
    99+
    2024-04-02
  • 深入理解Python虚拟机中描述器的实现原理
    目录描述器的基本用法描述器的实现原理描述器的应用场景实现属性访问控制实现数据验证和转换实现延迟加载和缓存实现 ORM 映射总结在本篇文章当中主要给大家介绍一个我们在使用类的时候经常使...
    99+
    2023-05-19
    Python虚拟机描述器实现原理 Python 描述器 Python虚拟机
  • JavaScript中如何深入理解this
    JavaScript中如何深入理解this,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。定义this是函数运行时自动生成的内部对象,即调用函数...
    99+
    2024-04-02
  • sql server中的任务调度与CPU深入讲解是怎样的
    本篇文章为大家展示了sql server中的任务调度与CPU深入讲解是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一. 概述我们知道在操作系统看来, sql...
    99+
    2024-04-02
  • 如何理解SQL Server SQL性能优化中的参数化
    如何理解SQL Server SQL性能优化中的参数化,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。数据库参数化的模式数据库的...
    99+
    2024-04-02
  • 如何深入理解Java中的接口
    今天就跟大家聊聊有关如何深入理解Java中的接口,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、前言前面我们说了抽象类的概述,我们对抽象类也有个认识和理解了,现在我们学习十分重要的...
    99+
    2023-06-21
  • 如何深入理解select (*)
    这期内容当中小编将会给大家带来有关如何深入理解select count(*),文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。SELECT COUNT( * ) F...
    99+
    2024-04-02
  • 如何解决SpringBoot扫描不到Controller的问题
    本篇内容主要讲解“如何解决SpringBoot扫描不到Controller的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决SpringBoot扫描不到Controller的问题”吧!...
    99+
    2023-06-20
  • SQL Server如何删除表中的重复数据
    本篇内容介绍了“SQL Server如何删除表中的重复数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!添加示例数据create&...
    99+
    2023-06-30
  • SQL Server中占CPU100%如何解决
    这篇文章给大家介绍SQL Server中占CPU100%如何解决,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。SQL1:查找***的30条告警事件select to...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作