Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 如何阅读SQLServerManagementStudio执行计划中的提示_Sql Server 2008_Indexing_Ssms_Sql Execution Plan - Fatal编程技术网

Sql server 2008 如何阅读SQLServerManagementStudio执行计划中的提示

Sql server 2008 如何阅读SQLServerManagementStudio执行计划中的提示,sql-server-2008,indexing,ssms,sql-execution-plan,Sql Server 2008,Indexing,Ssms,Sql Execution Plan,我很难理解您可以通过SQLServerManagementStudio获得的执行计划中的提示。下面是一个简化的示例,但所有内容都包括在内 索引搜索非聚集 谓词 探测[Bitmap1047],ScheduleId 反对 IX_日期 输出列表 预定日期 寻找谓词 日期>='2012-01-02'日期

我很难理解您可以通过SQLServerManagementStudio获得的执行计划中的提示。下面是一个简化的示例,但所有内容都包括在内

索引搜索非聚集

谓词

探测[Bitmap1047],ScheduleId

反对

IX_日期

输出列表

预定日期

寻找谓词

日期>='2012-01-02'日期<'2012-05-14'

ScheduleId是基于guid的外键。 IX_Date是一个包含日期、ScheduleId和包含小时数的索引 对我来说,上面的看起来很好。索引搜索应该是好的。它击中了一个相关的指数。然而,这个项目占用了执行时间的很大一部分,否则我就不会费心去理解它了。这让我感到困惑,我怀疑这是因为在阅读这篇文章时,我不理解一些基本的东西


有人能帮我解释一下吗?

从你提供的数据来看,我没有看到任何看起来太奇怪的东西。在此计划中,非聚集索引搜索的成本仅为12%,因此,除非有许多其他操作需要花费很少的时间,并且此操作相对较大,否则在我看来还可以


我认为执行成本似乎很高,因为它在50万行上执行非聚集索引搜索

从Index Seek返回的实际行数和估计行大小是多少?我更新了问题以包含此信息。您可以发布完整的查询计划吗?嗨,Justin,谢谢,但恐怕我已经没有直接可用的查询计划了,这是很久以前的事了。但问题更多的是如何阅读,而不是分析具体问题。。。条件应用于与日期部分匹配的所有行。有关多列索引中的列顺序的好文章,请参阅。这里可能不可用,因为我不知道PROBE语句是否是一个相等比较。这个操作有5次,每次占12%,所以我认为它是罪魁祸首。我能阻止它在这么多行中使用某种索引进行索引查找吗?这听起来确实是个问题。如果五种情况中的每种情况下的搜索都相同,那么您可能会以不同的方式编写查询,这样搜索只执行一次。是否可以发布查询本身?查询是从实体框架自动生成的。我知道我可以重写查询,但因为我不容易做到这一点,这就是为什么我,用这张罚单,试图专注于阅读执行计划,并在我已有的基础上进行优化。我明白了。可以使用稍微不同的Linq查询,使用更好的执行计划生成相同的数据。您还可以稍微更改实体和关系,以生成更好的查询。最后一种选择是将查询放在存储过程中,但这违背了实体框架的目的。您使用的是EF4还是更高版本?您可以尝试升级到最新版本,看看它是否能为您的实体生成更好的SQL代码。