首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解释我的ShowPlan(执行计划)

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

Stack Overflow用户
提问于 2012-04-17 18:22:36
回答 2查看 520关注 0票数 4

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

代码语言:javascript
复制
SELECT tb_bauteile_Basis.*
FROM tb_bauteile_Basis
ORDER BY tb_bauteile_Basis.Name;

我在Name字段上建立了索引,并显示了它的查询计划:

代码语言:javascript
复制
 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中删除了索引,新的查询计划是:

代码语言:javascript
复制
- 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'

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

在第二个显示计划中,这意味着我是否应该为Plauskomponente,Name,ID创建索引,以及是否应该为这三个字段创建复合索引?我如何确定是否应该建立一个综合指数?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-17 23:15:58

在第二个展示计划中,这意味着:我应该为Plauskomponente,Name,ID?我应该从这三个字段中创建一个综合指数吗?我怎样才能发现我应该做一个综合指数?

这些名称出现在ShowPlan部分中,该部分显示了Jet在设计查询计划时分析的信息。这3个字段上的索引,无论是单独的索引还是基于所有这三个字段的单个复合索引,都不会对特定的查询有所帮助。实际上,添加索引会减慢其他操作的速度。在添加或删除行,或编辑索引字段中的值时,数据库引擎必须将更改写入表和复合索引。

优化索引可能很棘手。索引可以提高SELECT速度,但会降低插入、删除和更新操作的速度。您需要为您的应用程序找到合适的平衡。如果您是Access中的新手,请尝试菜单的数据库工具部分中的性能分析器向导。检查它提供的建议。很多时候,这些建议都会涉及到索引。您可以添加它建议的索引,如果它们降级或不能提高您的整体性能,则可以稍后删除它们。

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

难倒我了。我猜查询规划器已经找到了名称索引,因此认为查找其他索引没有意义。

然而,这带来了另一个重要的问题。该表包含1,553行,但Plauskomponente仅包含3个不同的值。由于可变性如此之低,在具有基于Plauskomponente的WHERE子句的查询的计划中,很可能不会使用Plauskomponente上的索引。@Namphibian在一条评论中提到了原因。读取索引以找出哪些行与标准匹配,然后读取匹配的行,这可能比仅仅忽略索引并从表中读取所有行的成本更高。

最后,请注意ShowPlan信息部分中提到的统计数据。这些统计信息会在压缩数据库时更新。因此,当查询规划器做出关于如何优化查询计划的决策时,压缩对于为查询规划器提供最新的信息非常有用。

票数 2
EN

Stack Overflow用户

发布于 2012-04-17 19:21:59

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10189380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档