SQL Server - 缺少索引 - 什么会使用索引?

2024-01-28

我正在使用 SQL Server 2008,我们正在使用 DMV 来查找丢失的索引。然而,在创建新索引之前,我试图找出哪个 proc/query 需要该索引。我想要获得最多的信息,以便我可以对我的索引做出明智的决定。有时 SQL Server 想要的索引对我来说没有意义。有谁知道我怎样才能弄清楚想要什么?


您可以尝试类似此查询的操作,其中列出了 QueryText:

;WITH XMLNAMESPACES(DEFAULT N'http://schemas.microsoft.com/sqlserver/2004/07/showplan')
, CachedPlans AS
(SELECT
     RelOp.op.value(N'../../@NodeId', N'int') AS ParentOperationID
         ,RelOp.op.value(N'@NodeId', N'int') AS OperationID
         ,RelOp.op.value(N'@PhysicalOp', N'varchar(50)') AS PhysicalOperator
         ,RelOp.op.value(N'@LogicalOp', N'varchar(50)') AS LogicalOperator
         ,RelOp.op.value(N'@EstimatedTotalSubtreeCost ', N'float') AS EstimatedCost
         ,RelOp.op.value(N'@EstimateIO', N'float') AS EstimatedIO
         ,RelOp.op.value(N'@EstimateCPU', N'float') AS EstimatedCPU
         ,RelOp.op.value(N'@EstimateRows', N'float') AS EstimatedRows
         ,cp.plan_handle AS PlanHandle
         ,qp.query_plan AS QueryPlan
         ,st.TEXT AS QueryText
         ,cp.cacheobjtype AS CacheObjectType
         ,cp.objtype AS ObjectType
         ,cp.usecounts AS UseCounts
     FROM sys.dm_exec_cached_plans                            cp
         CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle)     st
         CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle)   qp
         CROSS APPLY qp.query_plan.nodes(N'//RelOp')          RelOp (op)
)
SELECT
    PlanHandle
        ,ParentOperationID
        ,OperationID
        ,PhysicalOperator
        ,LogicalOperator
        ,UseCounts
        ,CacheObjectType
        ,ObjectType
        ,EstimatedCost
        ,EstimatedIO
        ,EstimatedCPU
        ,EstimatedRows
        ,QueryText
    FROM CachedPlans
    WHERE CacheObjectType = N'Compiled Plan'

AND PhysicalOperator IN ('nothing will ever match this one!'
                        --,'Assert'                             
                        --,'Bitmap'
                        --,'Clustered Index Delete'
                        --,'Clustered Index Insert'
                        ,'Clustered Index Scan'
                        --,'Clustered Index Seek'
                        --,'Clustered Index Update'
                        --,'Compute Scalar'
                        --,'Concatenation'
                        --,'Constant Scan'
                        ,'Deleted Scan'
                        --,'Filter'
                        --,'Hash Match'
                        ,'Index Scan'
                        --,'Index Seek'
                        --,'Index Spool'
                        ,'Inserted Scan'
                        --,'Merge Join'
                        --,'Nested Loops'
                        --,'Parallelism'
                        ,'Parameter Table Scan'
                        --,'RID Lookup'
                        --,'Segment'
                        --,'Sequence Project'
                        --,'Sort'
                        --,'Stream Aggregate'
                        --,'Table Delete'
                        --,'Table Insert'
                        ,'Table Scan'
                        --,'Table Spool'
                        --,'Table Update'
                        --,'Table-valued function'
                        --,'Top'
                        )

只需在 UseCounts 和 EstimatedCost 的组合上添加 ORDER BY 即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server - 缺少索引 - 什么会使用索引? 的相关文章

随机推荐

  • 背景图像未加载到设备上

    我有这段代码 将图像放置在背景中并应用模糊效果 let effect UIBlurEffect style Dark override func viewDidLoad let backgroundView UIView frame vie
  • MySQL 许可和 GPL [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • 在算术运算中将 NaN 视为零?

    这是我正在努力解决的问题的一个简单例子 In 1 import pandas as pd In 2 import numpy as np In 3 test pd DataFrame np random randn 4 4 columns
  • 类的实例方法与模块方法

    我正在阅读 Ruby 模块方法的解释以及它们与类的实例方法有何不同 这是我正在阅读的解释 请记住 与实例方法不同 模块方法需要 在模块本身上定义 您如何访问该模块 记起 在模块定义中 self 指的是模块 定义的 因此 您需要使用 self
  • 如何使用 PHP 获取 MongoID 的字符串值?

    完成插入后 我想使用 json encode 将对象传递给客户端 问题是 id 值不包括在内 widget array text gt Some text this gt mongo gt db gt insert widget If I
  • imagemagick - 查找透明png轮廓的坐标(不是边框)

    虽然视觉轮廓很容易完成 但 imagemagick 是否可以输出透明图像轮廓的坐标 请注意 通过轮廓 我不仅仅指边界框边框 而是指任意形状的透明图像几何体周围的实际轮廓 假设您从这张具有透明背景的图像开始 您可以提取透明度并找到边缘 如下所
  • 上传大量文件时节点脚本导致系统冻结

    我有一个脚本 它是一个更大的电子程序的一部分 该脚本是一个循环 它从应用程序的临时目录中读取文件 然后将所有文件上传到 S3 这对于小型文件集效果很好 但对于较大的文件集 它会导致计算机冻结并重新启动并导致系统崩溃 Macbook pro
  • 如何使用新的 xml 属性并兼容旧版 Android 版本?

    我已经向我的应用程序添加了小部件功能 该功能与旧版本的 Android 回到 1 6 兼容 Android 3 1 中的小部件支持 xml 标签调整大小模式这是一个非常有用的功能 我希望允许用户调整他们的小部件的大小 但我仍然希望向后兼容
  • Flutter:我想在运行时将字体应用于整个应用程序文本

    我的应用程序中有语言选择设置 根据语言选择英语或阿拉伯语 我想使用不同的字体系列 我在 MaterialApp 内完成了它 但它不会实现我的目标 override Widget build BuildContext context retu
  • Phonegap/Cordova 构建错误 - Apple Mach-O 链接器错误:没有这样的文件或目录:libCordova.a

    创建新的 Cordova 2 1 0 项目并使用以前的 PhoneGap 应用程序中的一些代码更新 www 文件夹后 我收到错误 clang error no such file or directory Users peterbanjo
  • NoSQL 数据库中的全文搜索 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 这里有人有部署真正的在线系统的经验吗 该系统在任何 NoSQL 数据库中进行全文搜索 例如 全文搜索在 MongoDB Riak 和
  • PullToRefreshListView$InternalListViewSDK9 中的 IllegalStateException

    我在应用程序的两个活动中使用 PullToRefresh 库 我知道 这个库已被弃用 但它非常有用 它不仅可以处理来自顶部的刷新手势 还可以处理来自底部的刷新手势 但它有一个问题 应用程序很少因以下日志而崩溃 java lang Illeg
  • 如何在 Java 中格式化字符串

    原始问题 但如何格式化这样的字符串 第 1 步 共 2 步 通过使用 Java 替换变量 在 C 中这很容易 看一眼字符串格式 http download oracle com javase 6 docs api java lang Str
  • 将 float 转换或转换为 nvarchar?

    我需要从数据类型 float 的一列中进行选择 并将其作为 nvarchar 插入到另一列中 我尝试投射它 cast Column Name as nvarchar 50 结果是9 07235e 009而不是 10 位数字 电话号码 有谁知
  • Java 中覆盖方法的更广泛的参数类型

    下面的代码破坏了什么面向对象原则 不是 Java OO 原则 而是通用 OO 原则 class GeneralArg class Arg extends GeneralArg class A public void test Arg a c
  • 如何从数据库服务器插入带有时间戳的 MongoDB 文档

    在 Oracle 中 我可以简单地这样做 INSERT INTO myTable VALUES someValue SYSTIMESTAMP 这会将两个值插入到 myTable 中 其中之一是基于数据库服务器时间的时间戳 对于 MongoD
  • Grails 挂在命令行上

    我刚刚下载了 Grails 2 0 1 创建了一个新项目 然后尝试按照文档添加 mysql 连接器 但 Grails 在命令提示符下挂起 没有任何消息 我尝试以详细和堆栈跟踪模式执行 但它什么也没打印 我尝试清理并重新执行 但所有 grai
  • Jenkins Pipelines:如何从共享变量脚本使用 withCredentials()

    我想用一个withCredentials 块在共享变量 vars 脚本中而不是直接在 Jenkins 管道中 因为这是特定库的较低级别语义 并且根据具体情况可能需要也可能不需要 然而 withCredentials 或者 至少 它的签名 似
  • 如何在 OpenCV + Visual C++ 中测量对比度

    以前的问题是 如何在 OpenCV 中选择最佳对比度的图像 但根据 Rook 的建议 我正在更改它 我将在我的项目中使用 OpenCV Visual Studio 2010 我只是想知道 OpenCV 如何让这对我来说更容易 我从视频中提取
  • SQL Server - 缺少索引 - 什么会使用索引?

    我正在使用 SQL Server 2008 我们正在使用 DMV 来查找丢失的索引 然而 在创建新索引之前 我试图找出哪个 proc query 需要该索引 我想要获得最多的信息 以便我可以对我的索引做出明智的决定 有时 SQL Serve