Questions tagged «hints»

3
SELECT语句中的OPTION FAST有什么作用?
我对OPTION (FAST XXX)查询提示在SELECT语句中的作用做了一些挖掘,但仍然对此感到困惑。根据MSDN: 指定优化查询以快速检索第一个number_rows。这是一个非负整数。返回第一个number_rows之后,查询将继续执行并产生其完整结果集。 对我来说,这没有多大意义,但基本上查询可以快速获得前XXX行,然后以正常速度获得其余行? 使我对此产生思考的Microsoft Dynamics查询是: select pjproj.project,pjproj.project_desc,pjproj.customer,pjproj.cpnyid from pjproj WITH (NOLOCK) where project like '%' order by project OPTION(FAST 500) 谁能确切解释这个查询提示在做什么,这是不使用它的好处?

3
NOLOCK提示更改返回记录的顺序
在表Client字段上有一个聚集索引LastName。 当我简单地转储表中的所有记录时,除非按(nolock)提示使用提示,否则它们将按字母顺序显示。该提示会更改记录的顺序。应该是?。我敢肯定,没有其他会话具有对该表所做的更改的开放事务(至少sp_who2没有显示任何内容)。 如何解释顺序上的差异? 从评论中提取的其他信息: 没有命令。非聚集索引是否应强制执行该命令? 即使使用指定聚簇索引的索引提示,查询仍然返回不同的顺序。应该吗 我想知道为什么nolock在不明显更改计划的情况下更改返回记录的顺序。 我对它们做了一个WinDiff-除了(nolock)[查询提示] 之外,其他都一样。

1
为什么READPAST提示导致索引视图被忽略?
我正在研究使用READPAST提示来减少应用程序财务子系统中的资源锁定。 这似乎是个好方法,因为金融交易记录仅被添加,从未更新或删除。唯一会被跳过的行是在事务内部插入的全新行。在交易落实之前,它们实际上不存在于外界。 但是,我注意到使用READPAST提示的索引视图的查询性能较差。比较查询计划时,它看起来像是带有提示,查询优化器选择不使用索引视图,而是退回到将其视为常规视图。 我不确定为什么会这样。我想象索引视图与任何其他索引一样,可以在操作期间锁定键,并且添加操作READPAST也可以类似。 SELECT TOP 1 isa.InvoiceId FROM Financial_InvoiceSummaryAmounts isa WITH (READPAST) WHERE isa.TotalOwedAmount = 0.0 SELECT TOP 1 isa.InvoiceId FROM Financial_InvoiceSummaryAmounts isa WHERE isa.TotalOwedAmount = 0.0 添加NOEXPAND提示似乎也可以,但是我有兴趣了解更多有关为什么可能READPAST导致查询优化器首先做出选择的原因(作为完整答案的一部分)。

1
OPTION FORCE ORDER提高性能,直到删除行
我有一个稍微复杂的SQL Server 2008查询(大约200行相当密集的SQL),但没有按照我的需要执行。随着时间的流逝,性能从大约0.5秒下降到大约2秒。 看一下执行计划,很明显,通过重新排序联接,可以提高性能。我做到了,而且做到了……下降到约0.3秒。现在,该查询具有“ OPTION FORCE ORDER”提示,并且生活很顺利。 今天,我来了,清理数据库。我存档了大约20%的行,除了删除行外,在相关数据库中不执行任何操作...执行计划的执行总数为软管。它会完全判断某些子树将返回多少行,并且(例如)替换为: <Hash> 与 <NestedLoops Optimized='false' WithUnorderedPrefetch='true'> 现在,查询时间从大约0.3秒增加到大约18秒。(!)只是因为我删除了行。如果删除查询提示,我将返回大约2秒的查询时间。更好,但是更糟。 将数据库还原到多个位置和服务器后,我重现了该问题。简单地从每个表中删除大约20%的行总是会导致此问题。 对于强制联接顺序来说,使查询估计完全不准确(从而使查询时间无法预测)是否正常? 我应该只是希望我要么必须接受次优的查询性能,要么像鹰一样看着它并经常手动编辑查询提示?还是暗示每个联接?.3s至2s是一个很大的选择。 很明显,为什么优化器在删除行后就炸毁了?例如,“是的,它进行了一次样本扫描,并且由于我在数据历史记录中较早地归档了大多数行,因此样本产生了稀疏的结果,因此它低估了对排序后的哈希操作的需要”? 如果您想查看执行计划,请建议一个可以张贴它们的位置。否则,我将采样最惊人的部分。这是基本的错误估计,paren中的数字是(估计:实际)行。 / Clustered Index Scan (908:7229) Nested Loops (Inner Join) --< \ NonClustered Index Seek (1:7229) 请注意,内部循环应扫描908行,但扫描52,258,441。如果准确,则此分支将运行约2毫秒,而不是12秒。在删除行之前,此内部联接估计值的总和仅为2,并且对两个聚簇索引进行哈希匹配。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.