学习笔记——数据库的索引碎片计划缓存统计信息

Angular_JS Angular_JS     2022-10-04     758

关键词:

1.索引碎片

数据库存储本身是无序的,建立了聚集索引,会按照聚集索引物理顺序存入硬盘。既键值的逻辑顺序决定了表中相应行的物理顺序

而且在大多数的情况下,数据库写入频率远低于读取频率,索引的存在为了读取速度牺牲写入速度(页 为最小单位 8kb,区 物理连续的页(8页)的集合)

其内部碎片 数据库页内部产生的碎片,外部反之。

询碎片情况:

  1.  dbcc showcontig:四部分对象名,【索引名】|【索引id】
  2.  dbcc showcontig:当前库对象id,【索引名】|【索引id】    
  3.    sys.dm_db_index_physical_stats:数据库id,对象id,索引id,分区id,扫描模式 ‘

实例:

显示数据库里所有索引的碎片信息

SET NOCOUNT ON

USE pubs

DBCC SHOWCONTIG WITH ALL_INDEXES

GO

 

显示指定表的所有索引的碎片信息

SET NOCOUNT ONUSE pubs

DBCC SHOWCONTIG (authors) WITH ALL_INDEXES

GO

 

显示指定索引的碎片信息

SET NOCOUNT ON

USE pubs

DBCC SHOWCONTIG (authors,aunmind)

GO

2.计划缓存

平时所写的SQL语句本质只是获取数据的逻辑,而不是获取数据的物理路径。当我们写的SQL语句传到SQL Server的时候,查询分析器会将语句依次进行解析(Parse)、绑定(Bind)、查询优化(Optimization,有时候也被称为简化)、执行(Execution)。除去执行步骤外,前三个步骤之后就生成了执行计划,也就是SQL Server按照该计划获取物理数据方式,最后执行步骤按照执行计划执行查询从而获得结果。但查询优化器不是本篇的重点,本篇文章主要讲述查询优化器在生成执行计划之后,缓存执行计划的相关机制以及常见问题。

 1: SELECT * 
   2: FROM A INNER JOIN B ON a.a=b.b
  3: INNER JOIN C ON c.c=a.a

 实例:

通过动态管理视图和函数,查看当前缓存的所有执行计划
	       SELECT/*PlanCache*/			
		ISNULL(QS.execution_count,0) AS ExecutionCount
		,CP.usecounts AS LookupCount
		,CP.objtype AS ObjectType
		,ST.text AS Sql		
		,QP.query_plan AS QueryPlan
	FROM				
		sys.dm_exec_cached_plans AS CP
		LEFT JOIN sys.dm_exec_query_stats AS QS ON CP.plan_handle=QS.plan_handle
		CROSS APPLY sys.dm_exec_sql_text(CP.plan_handle) AS ST
		CROSS APPLY sys.dm_exec_query_plan(CP.plan_handle) AS QP
	WHERE				
		ST.text NOT LIKE 'SELECT/*PlanCache*/%'
	ORDER BY				
		QS.last_execution_time ASC;

 

3.统计信息

Sqlserver 查询是基于开销查询的,在首次生成执行计划时,是基于多阶段的分析优化才确定出较好的执行计划。而这些开销的基数估计,是根据统计信息来确定的。统计信息其实就是对表的各个字段的总体数据进行分段分布,数据库默认都会自动维护。

表和视图都有统计信息,统计信息对象是根据索引或表列的列表创建的。当某列第一次最为条件查询时,将创建单列的统计信息。当创建索引时,将创建同名的统计信息。索引中,统计信息只统计首列,因此索引除了按首列排序存储数据外,其统计信息也是按首列计算统计的,所以索引设置时定义的第一列非常重要。每个统计信息对象都在包含一个或多个表列的列表上创建,并且包括显示值在第一列中的分布的直方图。

实例:

SELECT 	
		O.* 
	FROM 
		tb_Order2 AS O 
	WHERE 
                O.CustomerLastName='Adams';	

 

 

索引统计

数据库引擎是高度优化的闭环系统,基于执行计划的反馈,查询优化器在一定程度上自动优化现有的执行计划。查询优化的核心是索引优化,数据库引擎通过计数器统计关于索引操作的数据,统计的信息包括:使用次数、物理存... 查看详情

运维脚本:索引统计

数据库引擎是高度优化的闭环系统,基于执行计划的反馈,查询优化器在一定程度上自动优化现有的执行计划。查询优化的核心是索引优化,数据库引擎通过计数器统计关于索引操作的数据,统计的信息包括:使用次数、物理存... 查看详情

七张图解释什么是库数据数据库索引统计信息执行计划执行代价

...家带来点欢乐,像手工耿学习出一遍让大家有兴趣学数据库的文章:古代人们生活物资太多时,房间变得一团糟,不得不面对很多困难,萌生了收纳的想法上图图1:老秦有了钱之后,萌生了一统天下的... 查看详情

40.oracle的统计信息

1.什么是统计信息统计信息主要是描述数据库中表,索引的大小,规模,数据分布状况等的一类信息。比如,表的行数,块数,平均每行的大小,索引的leafblocks,索引字段的行数,不同值的大小等,都属于统计信息。CBO正是根据... 查看详情

索引碎片

显示数据库里所有索引的碎片信息SETNOCOUNTONUSEpubsDBCCSHOWCONTIGWITHALL_INDEXES显示指定表的所有索引的碎片信息SETNOCOUNTONUSEpubsDBCCSHOWCONTIG(authors)WITHALL_INDEXESGO 显示指定索引的碎片信息SETNOCOUNTONUSEpubsDBCCSHOWCONTIG(authors,aunm 查看详情

oracel学习系列

CBO是基于成本的优化器RBO是基于规则的优化器 基于CBO的执行计划需要依赖于系统的统计信息,这些统计信息的类型种类随着DBMS产品或相同DBMS的不同版本会存在一定的差异.统计信息包括行数、数据块数、没给数据块中的平均... 查看详情

oracle中的统计信息问题

为什么统计信息会导致索引失效,我把统计信息删掉后,查询快了好多,有统计信息时,执行计划不走索引统计信息需要及时更新才会发挥它的作用,旧的统计信息不仅无用,而且会导致查询优化器使用不正确的执行计划,导致... 查看详情

统计学习方法笔记——统计学习方法概论

1.统计学习     统计学习是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科,也称统计机器学习。统计学习是数据驱动的学科。统计学习是一门概率论、统计学、信息论、计... 查看详情

三小节内容

...量(内存授予)以及其他许多事情。访问数据时要使用的索引的选择就是这些因素之一。正如您将记住的,键和RID查找操作在I/O方面是昂贵的,并且SQLServer在估计将需要大量这些操作时不使用非集群索引。SQLServer维护有关索引的... 查看详情

16周翻译(代码片段)

...量(内存授予)以及其他许多事情。访问数据时要使用的索引的选择就是这些因素之一。正如您将记住的,键和RID查找操作在I/O方面是昂贵的,并且SQLServer在估计将需要大量这些操作时不使用非集群索引。SQLServer维护有关索引的... 查看详情

增加索引分析(代码片段)

1、每次执行需优化SQL前,带上清除缓存的设置SQL。平常在进行SQLServer性能优化时,为了确保真实还原性能问题,我们需要关闭SQLServer自身的执行计划及缓存。可以通过以下设置清除缓存。1DBCCDROPCLEANBUFFERS--清除缓冲区2DBCCFREEPROCCA... 查看详情

如何提高sqlserver大数据条件下的查询速度?

...,重复率低的放前面。SQLServer提供了一种简化并自动维护数据库的工具。这个称之为数据库维护计划向导(DatabaseMaintenancePlanWizard,DMPW)的工具也包括了对索引的优化。如果你运行这个向导,你会看到关于数据库中关于索引的统... 查看详情

id索引更改怎么重新抽取索引内容

...无论何时对基础数据执行插入、更新或删除操作,SQLServer数据库引擎都会自动维护索引。随着时间的推移,这些修改可能会导致索引中的信息分散在数据库中(含有碎片)。当索引包含的页中的逻辑排序(基于键值)与数据文件... 查看详情

七张图解释什么是库数据数据库索引统计信息执行计划执行代价

...家带来点欢乐,像手工耿学习出一遍让大家有兴趣学数据库的文章:古代人们生活物资太多时,房间变得一团糟,不得不面对很多困难,萌生了收纳的想法上图图1:老秦有了钱之后,萌生了一统天下的... 查看详情

七张图解释什么是库数据数据库索引统计信息执行计划执行代价

...家带来点欢乐,像手工耿学习出一遍让大家有兴趣学数据库的文章:古代人们生活物资太多时,房间变得一团糟,不得不面对很多困难,萌生了收纳的想法上图图1:老秦有了钱之后,萌生了一统天下的... 查看详情

directx学习笔记--索引缓存绘图(代码片段)

引言:顶点缓存绘制图形,虽然比较简单,但是简单的图形还好。一个三角形,三个点。但是,比如我们要绘制一个立方体,需要6*2=12个三角形,总共要36个顶点,而实际上表示一个立方体只需... 查看详情

学成在线(第15天)(代码片段)

...课程计划信息从哪里获取?目前课程计划信息在课程管理数据库和ES索引库中存在,考虑性能要求,课程发布后对课程的查询统一从ES索引库中查询。前端通过请求搜索服务获取课程信息,需要单独在搜索服务中定义课程信息查... 查看详情

统计学习方法笔记-概述

统计学习方法笔记缘起统计学习方法是李航博士的经典只作,也是很多学习机器学习的同学入门必备的书籍。这本书结合理论和习题,可深可浅的讲述了机器学习算法的原理。之前也读过一遍这本书,现在之所以写《... 查看详情