0
Posted on Monday, August 25, 2014 by 醉·醉·鱼 and labeled under ,
原文在这里http://www.sqlpassion.at/archive/2013/06/12/sql-server-tipping-games-why-non-clustered-indexes-are-just-ignored/,我顺带翻译成中文吧。

有时候,SQL SERVER会忽略掉定义好的Non-Clustered Index,而选用Clustered Index Scan,这种行为在SQL SERVER里面叫做‘Tipping Point’。 而且,最重要的是,这个Tipping Point和Table Page有关,而和Table records无关。Tipping point大概在24%-33%之间。

开始如下测试。创建一个Table,每条记录会有40bytes,每个page会有200条记录。


插入80000条记录。所以会有400个page。所以Tipping point大概是在100 - 133 之间(实际上这个测试里面会高于这个值),那相当于说,用NonClustered Index的话,你只能够取到这张表0.125% - 0.167%的记录。这相当于还不用这个Index。

实际上这次的Tipping Point会在158。如下,第一个query会用到NonClustered Index,而第二个query直接用Clustered Index Scan了。

执行计划

更加有趣的是,如果我强制使用NonClustered Index,下面的这段query将会达到165148!这可是只有420page的table啊!



0
Responses to ... Tipping Point In SQL SERVER

Post a Comment