首页 > 其他分享 >1、查看索引命中情况

1、查看索引命中情况

时间:2023-09-14 11:00:13浏览次数:50  
标签:index name 查看 聚集 索引 IO 命中 磁盘

--查看索引命中详情:
set statistics time on
set statistics io on
set statistics profile on
select* from  表名

使用索引好处:执行原理(https://blog.csdn.net/m0_38128121/article/details/79663261)

b+树:非叶子节点不存储真实的数据,只存储指引搜索方向的数据项

b+树的查找过程
如图所示,如果要查找数据项29,那么首先会把磁盘块1由磁盘加载到内存,此时发生一次IO,在内存中用二分查找确定29在17和35之间,锁定磁盘块1的P2指针,内存时间因为非常短(相比磁盘的IO)可以忽略不计,通过磁盘块1的P2指针的磁盘地址把磁盘块3由磁盘加载到内存,发生第二次IO,29在26和30之间,锁定磁盘块3的P2指针,通过指针加载磁盘块8到内存,发生第三次IO,同时内存中做二分查找找到29,结束查询,总计三次IO。真实的情况是,3层的b+树可以表示上百万的数据,如果上百万的数据查找只需要三次IO,性能提高将是巨大的,如果没有索引,每个数据项都要发生一次IO,那么总共需要百万次的IO,显然成本非常非常高。
————————————————
版权声明:本文为CSDN博主「蹲茅坑逗蛆蛆」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_38128121/article/details/79663261
原文链接:https://blog.csdn.net/m0_38128121/article/details/79663261

时间复杂度O(log n) n是记录总数,底数是树的分叉数,结果就是树的层次数

概述:聚簇索引的数据的物理存放顺序与索引顺序是一致的

数据行的物理顺序与列值的顺序相同,如果我们查询id比较靠后的数据,那么这行数据的地址在磁盘中的物理地址也会比较靠后。而且由于物理排列方式与聚集索引的顺序相同,所以也就只能建立一个聚集索引了。

1.SQLServer索引有两种,聚集索引和非聚集索引;

2.聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续。

3.聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个。


非聚集索引的二次查询问题


非聚集索引叶节点仍然是索引节点,只是有一个指针指向对应的数据块,此如果使用非聚集索引查询,而查询列中包含了其他该索引没有覆盖的列,那么他还要进行第二次的查询,查询节点上对应的数据行的数据。

聚簇索引与非聚簇索引(也叫二级索引 执行过程)--最清楚的一篇讲解(https://cloud.tencent.com/developer/article/1541265)

注意点:

聚集索引没有Bookmark Lookup操作。

非聚集索有Bookmark Lookup操作,因为得到一行数据起码有两次IO,一次访问索引(聚集索引),一次访问基本表。
索引分为索引查找(Seek)和索引扫描(Scan)
索引是一颗B树,
index seek是查找从B树的根节点开始,一级一级找到目标行。(效率高)
index scan则是从左到右,把整个B树遍历一遍。(相当于从杂乱无序的堆中查找数据)

【假设唯一的目标行位于索引树最右的叶节点上(假设是非聚集索引,树深度2,叶节点占用k页物理存储)。
index seek引起的IO是4,而index scan引起的IO是K,性能差别巨大。】

索引失效: https://www.cnblogs.com/kerrycode/p/4806236.html

创建非聚集索引:(NONCLUSTERED 非聚集)
CREATE NONCLUSTERED INDEX [索引名] ON [dbo].[System_HTE_Basic_HteAndSubHte]
(
	[HTEID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

如何创建索引

创建索引的语法:

CREATE [UNIQUE][CLUSTERED | NONCLUSTERED]  INDEX  index_name  ON {table_name | view_name} [WITH [index_property [,....n]]

说明:

UNIQUE: #建立唯一索引。

CLUSTERED: #建立聚集索引。

NONCLUSTERED: #建立非聚集索引。

Index_property: #索引属性。

#UNIQUE索引既可以采用聚集索引结构,也可以采用非聚集索引的结构,如果不指明采用的索引结构,则SQL Server系统默认为采用非聚集索引结构。

#删除索引语法:

DROP INDEX table_name.index_name[,table_name.index_name]

说明:table_name: 索引所在的表名称。

index_name : 要删除的索引名称。

显示索引信息:

使用系统存储过程:sp_helpindex 查看指定表的索引信息。

执行代码如下:

Exec sp_helpindex book1;

数据库索引原理 b树

(33条消息) 数据库索引原理 b树_coolwriter的博客-CSDN博客_b树索引

标签:index,name,查看,聚集,索引,IO,命中,磁盘
From: https://www.cnblogs.com/kkbk/p/17701920.html

相关文章

  • 聚簇索引
    聚簇索引(ClusteredIndex)是数据库中一种特殊的索引类型,它决定了表中数据的物理存储顺序。在聚簇索引中,表中的数据按照索引的顺序进行物理排序,并且每个表只能有一个聚簇索引。举个例子,考虑一个名为"employees"的表,包含以下列:employee_id、first_name、last_name、salary。如果......
  • MySQL入门系列11-索引
    一、概念索引是帮助MySQL高效获取数据的数据结构。数据库除了存储数据之外,还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用数据,当我们在查找数据的时候,就可以在这些数据结构上实现高级查找算法,快速查找我们需要的数据,这种数据结构就是索引。在没有索引的情况下,查询......
  • [Microsoft Azure] Azure App Service 如何查看实时日志
    本文将介绍如何在AzureAppService中查看实时日志,以便实时监控应用程序的运行状况和性能。在处理AzureAppService上运行的应用程序时,查看实时日志对于监控应用程序性能和诊断问题非常重要。实时日志可以帮助我们快速发现并解决潜在问题。步骤1:登录到Azure门户首先,......
  • 索引常见面试题
    索引常见面试题什么是索引?索引是数据的目录,用来加快数据的搜索,类似书本的目录可以分为几个类型数据结构b+树索引,通过b+树存储索引,但是非叶子节点保存数据,叶子节点保存数据hash索引:通过hash计算得出索引位置fulltext索引:也叫全文索引(我不会介绍)物理存储聚簇索引:索引......
  • 索引失效有哪些
    索引失效有哪些使用左模糊或者左右模糊匹配因为索引时按照从第一个字符开始排序,也就是按照前缀排序,左模糊查询的时候,符合查询条件的前缀是无规律的,并不能使用索引。查询条件中对索引字段进行做了函数,类型转换,计算操作之后因为索引保存的是原始值,并不是操作之后的数值,但是......
  • 说一下索引覆盖,索引下推,回表
    说一下索引覆盖,索引下推,回表索引覆盖是指在查询过程中,查询的数据都能在二级索引的树中找到,不用根据主键查覆盖索引索引下推没有索引下推:执行器发送查询条件给存储引擎查找,存储引擎找到一条之后就返回给执行器,执行器判断当前记录是否符合条件,符合保留,不符合丢弃。重复过程,......
  • win10照片查看器不见了
    1、右键桌面空白处,新建一个“文本文档”2、在文档自己中粘贴以下内容WindowsRegistryEditorVersion5.00;ChangeExtension'sFileType[HKEY_CURRENT_USER\Software\Classes\.jpg]@="PhotoViewer.FileAssoc.Tiff";ChangeExtension'sFileType[HKEY_CURRENT_U......
  • Linux实现查看文件内容的5种方式
    除了使用vi/vim编辑器查看文件内容和使用cat命令将文件所有内容展示到终端上以外,还有多种方式。1、more:分屏显示文件内容。   点击q键退出。    more与cat类似,只不过如果文件内容超过了当前终端一个屏幕能显示的大小,此时more命令就会在终端只显示一个屏幕的文件内容......
  • 查看子文件夹中的文件个数及find命令解析
    查看子文件夹中的文件个数find/home/test-typef-printf'%h\n'|sort|uniq-c/home/test要查找的目录-type按文件类型查找f:指普通文件d:目录文件-printf打印输出%h文件目录\n新行sort排序uniq-c去重并统计次数测试创建文件当前目录/home/test,......
  • linux查看磁盘挂载的三种方法
    linux查看磁盘挂载的三种方法第一种方法:使用df命令,这个命令比较常用,大家都很熟悉。问题是这种方法,有时候挂载点和挂载的卷不在同一行,使用脚本分析需要一点技巧的。例如:orientalson:/home#dfFilesystem          1K-blocks     UsedAvailableUse%Mountedon/d......