繁体   English   中英

SQL SERVER - 执行计划

[英]SQL SERVER - Execution plan

我在两个数据库中都有一个VIEW。 在一个数据库中,运行时间不到1秒,但在另一个数据库中运行1分钟或更长时间。 我检查索引,一切都是一样的。 行数之间的差异低于每个其他数据库的1000万行。

我检查de exectuion计划,我发现的是,需要更多时间的数据库,我有3个哈希匹配(1个聚合和2个右外连接),在查询批处理中可以100%响应。 在另一个数据库中,我在执行计划中没有这个。

谁能告诉我在哪里可以开始搜索问题?

谢谢,抱歉英文不好。

您可以在此处查看此链接,以获取有关不同类型连接的快速说明。

基本上,根据您提供给我们的信息,以下是可能出错的一些替代方案:

  1. 一个DB有索引,另一个没有。
  2. 一个DB中的一些连接表之间的大小差异超过另一个DB,这足以改变所使用的连接类型。
  3. 虽然您的索引在两个数据库表组中可能是相同的,但正如您所说的那样......其他数据库可能已经过时/坏的统计信息或过多的索引碎片,导致计划次优。

编辑:

关于下面的评论,重建索引与删除和重新创建索引类似。 由于创建索引还会为这些索引创建统计信息,因此重建也会处理这些索引。 但有时这还不够。

虽然官方默认统计数据应该以实际数据的约20%采样率构建,但实际上采样率可以低至几个百分点,具体取决于表格的大小。 它很少接近20%。 因此,许多DBA使用FULLSCAN手动构建统计数据以获得100%的采样率。

统计数据在任何一种方式都需要相同的存储空间,因此除了维护计划所需的额外时间之外,实际上没有任何缺点。 在我目前的项目中,我们有几种情况,统计数据的默认采样率不够,并且仍会产生错误的计划。 所以我们每隔几周就会定期用FULLSCAN更新所有统计数据,以确保性能保持一流。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM