sql server索引功能资料

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

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

无论何时对基础数据执行插入、更新或删除操作,SQL Server 数据库引擎都会自动维护索引。随着时间的推移,这些修改可能会导致索引中的信息分散在数据库中(含有碎片)。当索引包含的页中的逻辑排序(基于键值)与数据文件中的物理排序不匹配时,就存在碎片。碎片非常多的索引可能会降低查询性能,导致应用程序响应缓慢。下面是一些简单的查询索引的sql。MSSQL的 DBA_Huangzj  提供。

判断无用的索引:

__何问起 hovertree.com
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED  
SELECT TOP 30  
        DB_NAME() AS DatabaseName ,  
        '[' + SCHEMA_NAME(o.Schema_ID) + ']' + '.' + '['  
        + OBJECT_NAME(s.[object_id]) + ']' AS TableName ,  
        i.name AS IndexName ,  
        i.type AS IndexType ,  
        s.user_updates ,  
        s.system_seeks + s.system_scans + s.system_lookups AS [System_usage]  
FROM    sys.dm_db_index_usage_stats s  
        INNER JOIN sys.indexes i ON s.[object_id] = i.[object_id]  
                                    AND s.index_id = i.index_id  
        INNER JOIN sys.objects o ON i.object_id = O.object_id  
WHERE   s.database_id = DB_ID()  
        AND OBJECTPROPERTY(s.[object_id], 'IsMsShipped') = 0  
        AND s.user_seeks = 0  
        AND s.user_scans = 0  
        AND s.user_lookups = 0  
        AND i.name IS NOT NULL  
ORDER BY s.user_updates DESC

判断 哪些索引缺失:

__何问起 hovertree.com
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED  
SELECT TOP 30  
        ROUND(s.avg_total_user_cost * s.avg_user_impact * ( s.user_seeks  
                                                            + s.user_scans ),  
              0) AS [Total Cost] ,  
        s.avg_total_user_cost * ( s.avg_user_impact / 100.0 ) * ( s.user_seeks  
                                                              + s.user_scans ) AS Improvement_Measure ,  
        DB_NAME() AS DatabaseName ,  
        d.[statement] AS [Table Name] ,  
        equality_columns ,  
        inequality_columns ,  
        included_columns  
FROM    sys.dm_db_missing_index_groups g  
        INNER JOIN sys.dm_db_missing_index_group_stats s ON s.group_handle = g.index_group_handle  
        INNER JOIN sys.dm_db_missing_index_details d ON d.index_handle = g.index_handle  
WHERE   s.avg_total_user_cost * ( s.avg_user_impact / 100.0 ) * ( s.user_seeks  
                                                              + s.user_scans ) > 10  
ORDER BY [Total Cost] DESC ,  
        s.avg_total_user_cost * s.avg_user_impact * ( s.user_seeks  
                                                      + s.user_scans ) DESC  

看看那些索引维护成本很高 通俗的说就是更新次数大于使用这个索引的次数

__何问起 hovertree.com
SELECT TOP 20  
        DB_NAME() AS DatabaseName ,  
        '[' + SCHEMA_NAME(o.Schema_ID) + ']' + '.' + '['  
        + OBJECT_NAME(s.[object_id]) + ']' AS TableName ,  
        i.name AS IndexName ,  
        i.type AS IndexType ,  
        ( s.user_updates ) AS update_usage ,  
        ( s.user_seeks + s.user_scans + s.user_lookups ) AS retrieval_usage ,  
        ( s.user_updates ) - ( s.user_seeks + user_scans + s.user_lookups ) AS maintenance_cost ,  
        s.system_seeks + s.system_scans + s.system_lookups AS system_usage ,  
        s.last_user_seek ,  
        s.last_user_scan ,  
        s.last_user_lookup  
FROM    sys.dm_db_index_usage_stats s  
        INNER JOIN sys.indexes i ON s.[object_id] = i.[object_id]  
                                    AND s.index_id = i.index_id  
        INNER JOIN sys.objects o ON i.object_id = O.object_id  
WHERE   s.database_id = DB_ID('{0}')  
        AND i.name IS NOT NULL  
        AND OBJECTPROPERTY(s.[object_id], 'IsMsShipped') = 0  
        AND ( s.user_seeks + s.user_scans + s.user_lookups ) > 0  
ORDER BY maintenance_cost DESC  

常常使用的索引查看 看看你常用使用的索引是否建立的合理

__何问起 hovertree.com
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED  
SELECT TOP 20  
DB_NAME() AS DatabaseName  
, '['+SCHEMA_NAME(o.Schema_ID)+']'+'.'+'['+OBJECT_NAME(s.[object_id]) +']'AS TableName  
, i.name AS IndexName  
, i.type as IndexType  
, (s.user_seeks + s.user_scans + s.user_lookups) AS Usage  
, s.user_updates  
FROM sys.dm_db_index_usage_stats s  
INNER JOIN sys.indexes i ON s.[object_id] = i.[object_id]  
AND s.index_id = i.index_id  
INNER JOIN sys.objects o ON i.object_id = O.object_id  
WHERE s.database_id = DB_ID()  
AND i.name IS NOT NULL  
AND OBJECTPROPERTY(s.[object_id], 'IsMsShipped') = 0  
ORDER BY Usage DESC  

决定使用哪种碎片整理方法的第一步是分析索引以确定碎片程度 DBCC SHOWCONTIG(表名) WITH ALL_INDEXES 先查碎片信息。

重新组织:

若要重新组织一个或多个索引,可以使用带 REORGANIZE 子句的 ALTER INDEX 语句。此语句可以替代 DBCC INDEXDEFRAG 语句。若要重新组织已分区索引的单个分区,可以使用 ALTER INDEX 的 PARTITION 子句。

重新组织索引是通过对叶页进行物理重新排序,使其与叶节点的逻辑顺序(从左到右)相匹配,从而对表或视图的聚集索引和非聚集索引的叶级别进行碎片整理。使页有序可以提高索引扫描的性能。索引在分配给它的现有页内重新组织,而不会分配新页。如果索引跨多个文件,将一次重新组织一个文件,不会在文件之间迁移页。

重新组织还会压缩索引页。如果还有可用的磁盘空间,将删除此压缩过程中生成的所有空页。压缩基于 sys.indexes 目录视图中的填充因子值。

重新组织进程使用最少的系统资源。而且,重新组织是自动联机执行的。该进程不持有长期阻塞锁,所以不会阻止运行查询或更新。

索引碎片不太多时,可以重新组织索引。请参阅上面的表,了解有关碎片的指导原则。不过,如果索引碎片非常多,重新生成索引则可以获得更好的结果。

 

重新组织索引时,除了重新组织一个或多个索引外,默认情况下还将压缩聚集索引或基础表中包含的大型对象数据类型 (LOB)。数据类型 image、text、ntext、varchar(max)、nvarchar(max)、varbinary(max) 和 xml 都是大型对象数据类型。压缩此数据可以改善磁盘空间使用情况:

  • 重新组织指定的聚集索引将压缩该聚集索引的叶级别(数据行)包含的所有 LOB 列。

  • 重新组织非聚集索引将压缩该索引中属于非键(包含性)列的所有 LOB 列。

  • 如果指定 ALL,将重新组织与指定的表或视图相关联的所有索引,并压缩与聚集索引、基础表或带有包含列的非聚集索引相关联的所有 LOB 列。

  • 如果 LOB 列不存在,则忽略 LOB_COMPACTION 子句。

http://www.cnblogs.com/roucheng/p/3541165.html

重新生成:

 

重新生成索引将删除该索引并创建一个新索引。此过程中将删除碎片,通过使用指定的或现有的填充因子设置压缩页来回收磁盘空间,并在连续页中对索引行重新排序(根据需要分配新页)。这样可以减少获取所请求数据所需的页读取数,从而提高磁盘性能。

可以使用下列方法重新生成聚集索引和非聚集索引:

  • 带 REBUILD 子句的 ALTER INDEX。此语句将替换 DBCC DBREINDEX 语句。

  • 带 DROP_EXISTING 子句的 CREATE INDEX。

 

 

重新组织或重新生成索引

  1. 在“对象资源管理器”中,展开包含您要重新组织索引的表的数据库。

  2. “表”文件夹。

  3. 展开要为其重新组织索引的表。

  4. “索引”文件夹。

  5. “重新组织”。

  6. “重新组织索引”对话框中,确认正确的索引位于“要重新组织的索引”网格中,然后单击“确定”。

  7. “压缩大型对象列数据”复选框,以指定也压缩所有包含大型对象 (LOB) 数据的页。

  8. “确定”。

重新组织表中的所有索引

  1. 在“对象资源管理器”中,展开包含您要重新组织索引的表的数据库。

  2. “表”文件夹。

  3. 展开要为其重新组织索引的表。

  4. “索引”文件夹,然后选择“全部重新组织”。

  5. “重新组织索引”对话框中,确认正确的索引位于“要重新组织的索引”中。 “要重新组织的索引”网格中删除索引,请选择该索引,再按 Delete 键。

  6. “压缩大型对象列数据”复选框,以指定也压缩所有包含大型对象 (LOB) 数据的页。

  7. “确定”。

重新生成索引

    1. 在“对象资源管理器”中,展开包含您要重新组织索引的表的数据库。

    2. “表”文件夹。

    3. 展开要为其重新组织索引的表。

    4. “索引”文件夹。

    5. “重新组织”。

    6. “重新生成索引”对话框中,确认正确的索引位于“要重新生成的索引”网格中,然后单击“确定”。

    7. “压缩大型对象列数据”复选框,以指定也压缩所有包含大型对象 (LOB) 数据的页。

    8. “确定”。

推荐:http://www.cnblogs.com/roucheng/p/GUID.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120563.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • Gson将map转换成JsonObject出现null值

    Gson将map转换成JsonObject出现null值Gson将map转换成JsonObject出现null值异常信息:Exceptioninthread”main”java.lang.IllegalStateException:NotaJSONObject:nullatcom.google.gson.JsonElement.getAsJsonObject(JsonElement…

    2022年9月25日
  • Allure报告开发自定义插件

    Allure报告开发自定义插件allure官网文档 https://docs.qameta.io/allure/alluregithub https://github.com/allure-framework/allure2当报告无法满足当前项目的需求,需要自定义内容来展示在报告中,即需要开发自己的自定义插件最终结果图:demo的结果是新增了一个MyTab目录栏,(demo未做有意义数据和css样式)…

    2022年7月26日
  • 谷歌清楚缓存快捷键_清除浏览器缓存的快捷键是什么

    谷歌清楚缓存快捷键_清除浏览器缓存的快捷键是什么我们经常会遇到这些情况,浏览器打开网页打不开,打开网页老是在加载。尤其是在我们在做网页设计的时候,经常预览结果往往没有出现我们想要的结果,很大可能性就是浏览器的缓存没有清除引起的。那么清除浏览器缓存的快捷键是什么呢?佰佰安全网就带大家来了解一下这些打开浏览器,按Ctrl+Shift+Delete,就会出现清除浏览器缓存的框,你可以选择你要清理的东西,点击ok,一切搞定。各种浏览器清除缓存数据的方法…

    2022年7月18日
  • win32 SetCapture 和 ReleaseCapture的使用

    win32 SetCapture 和 ReleaseCapture的使用最近在用win32写《visualC++经典游戏程序设计》中的扫雷游戏,在写到鼠标点击雷区的时候用到了SetCapture,和ReleaseCapture这对系统函数。那么为什么需要用到鼠标捕获的函数呢?我错误地认为鼠标的跟踪可以由Point进行传值处理,就能实现我想要的功能,但是我却疏忽了如果我的鼠标按下的时候把鼠标移除窗口外面的情况,这种情况的时候鼠标是在外面的,那么当我把鼠标弹起的…

    2022年6月5日
  • ansible 学习笔记

    ansible 学习笔记

    2022年3月1日
  • Python中字符串String去除出换行符(\n,\r)和空格的问题

    Python中字符串String去除出换行符(\n,\r)和空格的问题Python中字符串String去除出换行符和空格的问题(\n,\r)在Python的编写过程中,获取到的字符串进场存在不明原因的换行和空格,如何整合成一个单句,成为问题。方法:一、去除空格“·”代表的为空格  strip()"···xyz···".strip()#returns"xyz""···xyz···".lstrip()…

    2022年5月2日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号