如何解释我的ShowPlan(执行计划)

时间:2012-04-17 10:22:36

标签: sql database ms-access sql-execution-plan

我有一个Access 2003数据库,我想提高它的性能。昨天,我读了一篇关于执行计划(展示计划)的文章,今天我为这个查询运行了我的展示计划:

SELECT tb_bauteile_Basis.*
FROM tb_bauteile_Basis
ORDER BY tb_bauteile_Basis.Name;

我在Name字段上放了一个索引,并显示其查询计划:

 Inputs to Query -
Table 'tb_bauteile_Basis'
    Using index 'Name'
    Having Indexes:
    Name 1553 entries, 17 pages, 1543 values
      which has 1 column, fixed
    ID 1553 entries, 4 pages, 1553 values
      which has 1 column, fixed, clustered and/or counter
- End inputs to Query -
01) Scan table 'tb_bauteile_Basis'
    Using index 'Name'

接下来,我从Name删除了索引,新的查询计划是:

- Inputs to Query -
Table 'tb_bauteile_Basis'
    Using index 'PrimaryKey'
    Having Indexes:
    PrimaryKey 1553 entries, 4 pages, 1553 values
      which has 1 column, fixed, unique, clustered and/or counter, primary-key, no-nulls
    Plauskomponente 1553 entries, 4 pages, 3 values
      which has 1 column, fixed
    Name 1553 entries, 17 pages, 1543 values
      which has 1 column, fixed
    ID 1553 entries, 4 pages, 1553 values
      which has 1 column, fixed, clustered and/or counter
- End inputs to Query -
01) Scan table 'tb_bauteile_Basis'
    Using index 'PrimaryKey'

我应该如何解释这两个查询计划?

在第二个Showplan中,这意味着,我应该为Plauskomponente,Name,ID创建索引吗?我应该为这三个字段创建一个复合索引吗?如何确定是否应该制作综合索引?

为什么Plauskommponente出现在第一个展示计划中?

2 个答案:

答案 0 :(得分:2)

在第二个Showplan中意味着:我应该为Plauskomponente,Name,ID设置索引?我应该从这三个领域制作综合指数吗?我如何才能找到我应该制作复合索引?

这些名称出现在ShowPlan部分中,该部分显示了Jet在设计查询计划时所分析的信息。这三个字段的索引(单独的索引或基于所有三个的单个复合索引)对该特定查询没有帮助。实际上,添加索引会减慢其他操作...当您在索引字段中添加或删除行或编辑值时,db引擎必须将更改写入表和组合索引。

优化索引可能很棘手。索引可以加速SELECT,但减慢INSERT,DELETE和UPDATE操作。您需要为您的应用找到合适的平衡点。如果您在Access中相对较新,请从菜单的数据库工具部分尝试性能分析器向导。检查它提供的建议。很多时候,这些建议将涉及索引。您可以添加它建议的索引,如果它们降级或不提高整体性能,则稍后删除它们。

为什么Plauskommponente没有出现在第一个展示计划中?

打败我。我猜测查询规划器已经找到了Names索引,所以认为查找其他索引毫无意义。

然而,这提出了另一个重点。该表包含1,553行,但Plauskomponente仅包含3个不同的值。由于具有如此低的可变性,Plauskomponente上的索引甚至可能不会用于具有基于Plauskomponente的WHERE子句的查询的计划中。 @Namphibian在评论中提到了原因。读取索引以找出哪些行符合标准,然后读取匹配的行可能比忽略索引和读取表中的所有行更昂贵。

最后请注意ShowPlan信息部分中提到的统计信息。压缩数据库时会更新这些统计信息。因此,压缩对于为查询计划程序提供最新信息非常有用,因为它决定如何优化查询计划。

答案 1 :(得分:0)

查询正在读取整个表格。你没有where子句。您不太可能优化它。你能做的只是选择你需要的列。这减少了传回的数据量。添加索引不会加快查询速度,因为您没有where子句。如果添加了where子句并将where子句中使用的字段编入索引,则可以优化查询。