索引分析

来源:互联网 发布:网络最新赚钱方法 编辑:程序博客网 时间:2024/05/21 17:21

     索引是提高数据查询的有效的方法,但是也是最难全面掌握的技术,恰当的索引可以千倍提高效率,无效的索引浪费数据库空间,甚至降低查询的性能。在建立索引后要根据实际查询需求,对索引进行分析,判断其是否能够有效提高数据的查询性能。索引在创建之后,由于数据的增加、删除、更新等操作使得索引数据变得支离破碎,因此为了提高系统的性能,必须对索引进行维护。

       1、分析索引

         SQL Server 提供分析索引和查询性能的方法,这介绍最常用的SHOWPLAN_ALL和STATISTICS IO两种命令。

(1)SHOWPLAN_ALL命令,示全部查询计划,即在查询过程中连接表所采用的每个步骤,以及选择哪个索引,从而达到帮助用户分析有哪些索引被系统采用目的。

       SHOWPLAN_ALL的基本语法如下

             SET SHOWPLAN_ALL {ON|OFF}

      SET SHOWPLAN_ALL的设置是在执行或运行时设置,而不是在分析时设置。当 SET SHOWPLAN_ALL 为 ON 时,SQL Server 返回每个语句的执行信息但不执行语句,而且 Transact-SQL 语句将不执行。将该选项设置为 ON 后,将返回有关所有后续 Transact-SQL 语句的信息,直到将该选项设置为 OFF 为止。例如,如果在 SET SHOWPLAN_ALL 为 ON 时执行 CREATE TABLE 语句,则 SQL Server 从涉及同一个表的后续 SELECT 语句返回错误信息;指定的表不存在。因此,对该表的后续引用将失败。当 SET SHOWPLAN_ALL 为 OFF 时,SQL Server 执行语句但不生成报表。

【例】

USE pubsGOSET SHOWPLAN_ALL ONGO-- First query.SELECT au_id FROM authors WHERE au_id = '409-56-7008'GO-- Second query.SELECT cityFROM authorsWHERE city LIKE 'San%'GOSET SHOWPLAN_ALL OFFGO

列名 描述StmtText对于不是 PLAN_ROW 类型的行,该列包含 Transact-SQL 语句的文本。对于 PLAN_ROW 类型的行,该列包含对操作的描述。该列包含物理运算符,也可以选择包含逻辑运算符。该列还可以跟有由物理运算符决定的描述。有关更多信息,请参见逻辑运算符和物理运算符。StmtId当前批处理中的语句数。NodeId当前查询内的节点 ID。Parent上一级步骤的节点 ID。PhysicalOp节点的物理实现算法。仅限于 PLAN_ROWS 类型的行。LogicalOp该节点表示的关系代数运算符。仅限于 PLAN_ROWS 类型的行。Argument提供有关所执行操作的辅助信息。该列的内容取决于物理运算符。DefinedValues包含该运算符所引入值的用逗号分隔的列表。这些值可以是出现在当前查询(例如,在 SELECT 列表或 WHERE 子句中)内的计算表达式,或者是由查询处理器为处理该查询而引入的内部值。以后在该查询内的任何其它地方都可以引用这些定义的值。仅限于 PLAN_ROWS 类型的行。EstimateRows由该运算符输出的预计行数。仅限于 PLAN_ROWS 类型的行。EstimateIO该运算符的预计 I/O 成本。仅限于 PLAN_ROWS 类型的行。EstimateCPU该运算符的预计 CPU 成本。仅限于 PLAN_ROWS 类型的行。AvgRowSize正通过该运算符传递的行的预计平均行大小(以字节为单位)。TotalSubtreeCost该操作和所有下一级操作的预计(累积)成本。OutputList包含当前操作所计划的列的用逗号分隔的列表。Warnings包含与当前操作相关的警告信息的用逗号分隔的列表。警告信息可以在列的列表中包含字符串"NO STATS:()"。该警告信息表示查询优化器曾尝试根据该列的统计做决策,但没有可用的统计。因此,查询优化器不得不进行推测,这可能已导致选择低效的查询计划。有关创建或更新列统计(这些统计有助于查询优化器选择更高效的查询计划)的更多信息,请参见UPDATE STATISTICS。该列可以选择包含字符串"MISSING JOIN PREDICATE",这表示正在进行的联接(与表有关)未使用联接谓词。意外地除去联接谓词可能导致查询的时间比预期长得多,并返回巨大的结果集。如果出现该警告,请验证是否有意除去了联接谓词。Type节点类型。对于每个查询的父节点,这是 Transact-SQL 语句类型(如 SELECT、INSERT、EXECUTE 等)。对于表示执行计划的子节点,这是 PLAN_ROW 类型。Parallel0 = 运算符没有以并行方式运行。
1 = 运算符正在以并行方式运行。EstimateExecutions该运算符预计在当前查询运行期间将执行的次数。


0 0
原创粉丝点击