План запроса (Operator Cost > 10000%)

Mnior
Дата: 31.01.2009 16:53:21
Может и баян, стоимость оператора в запросе не просто больше 100%, а больше на порядок.
SELECT Top(1) Row_Number()OVER(ORDER BY (SELECT NULL)) FROM dbo.Test
См. аттач (Test.sqlplan + Test.png) или:
+ Только не бейте, здесь тот же Test.sqlplan
<ShowPlanXML xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan" Version="1.0" Build="9.00.3159.00">
  <BatchSequence>
    <Batch>
      <Statements>
        <StmtSimple StatementText="SELECT Top(1) Row_Number()OVER(ORDER BY (SELECT NULL)) FROM dbo.Test" StatementId="1" StatementCompId="1" StatementType="SELECT" StatementSubTreeCost="0.0032834" StatementEstRows="1" StatementOptmLevel="FULL" StatementOptmEarlyAbortReason="GoodEnoughPlanFound">
          <StatementSetOptions QUOTED_IDENTIFIER="false" ARITHABORT="false" CONCAT_NULL_YIELDS_NULL="false" ANSI_NULLS="false" ANSI_PADDING="false" ANSI_WARNINGS="false" NUMERIC_ROUNDABORT="false" />
          <QueryPlan CachedPlanSize="9" CompileTime="2" CompileCPU="2" CompileMemory="120">
            <RelOp NodeId="0" PhysicalOp="Top" LogicalOp="Top" EstimateRows="1" EstimateIO="0" EstimateCPU="1e-007" AvgRowSize="15" EstimatedTotalSubtreeCost="0.0032834" Parallel="0" EstimateRebinds="0" EstimateRewinds="0">
              <OutputList>
                <ColumnReference Column="Expr1005" />
              </OutputList>
              <Top RowCount="0" IsPercent="0" WithTies="0">
                <TopExpression>
                  <ScalarOperator ScalarString="(1)">
                    <Const ConstValue="(1)" />
                  </ScalarOperator>
                </TopExpression>
                <RelOp NodeId="1" PhysicalOp="Sequence Project" LogicalOp="Compute Scalar" EstimateRows="1" EstimateIO="0" EstimateCPU="6.00326" AvgRowSize="15" EstimatedTotalSubtreeCost="0.0032833" Parallel="0" EstimateRebinds="0" EstimateRewinds="0">
                  <OutputList>
                    <ColumnReference Column="Expr1005" />
                  </OutputList>
                  <SequenceProject>
                    <DefinedValues>
                      <DefinedValue>
                        <ColumnReference Column="Expr1005" />
                        <ScalarOperator ScalarString="row_number">
                          <Sequence FunctionName="row_number" />
                        </ScalarOperator>
                      </DefinedValue>
                    </DefinedValues>
                    <RelOp NodeId="2" PhysicalOp="Compute Scalar" LogicalOp="Compute Scalar" EstimateRows="1" EstimateIO="0" EstimateCPU="1.20065" AvgRowSize="15" EstimatedTotalSubtreeCost="1.20394" Parallel="0" EstimateRebinds="0" EstimateRewinds="0">
                      <OutputList>
                        <ColumnReference Column="Expr1004" />
                        <ColumnReference Column="Segment1007" />
                        <ColumnReference Column="Expr1008" />
                      </OutputList>
                      <ComputeScalar>
                        <DefinedValues>
                          <DefinedValue>
                            <ColumnReference Column="Expr1008" />
                            <ScalarOperator ScalarString="(1)">
                              <Const ConstValue="(1)" />
                            </ScalarOperator>
                          </DefinedValue>
                        </DefinedValues>
                        <RelOp NodeId="3" PhysicalOp="Segment" LogicalOp="Segment" EstimateRows="1" EstimateIO="0" EstimateCPU="1.20065" AvgRowSize="15" EstimatedTotalSubtreeCost="1.20394" Parallel="0" EstimateRebinds="0" EstimateRewinds="0">
                          <OutputList>
                            <ColumnReference Column="Expr1004" />
                            <ColumnReference Column="Segment1007" />
                          </OutputList>
                          <Segment>
                            <GroupBy />
                            <SegmentColumn>
                              <ColumnReference Column="Segment1007" />
                            </SegmentColumn>
                            <RelOp NodeId="4" PhysicalOp="Compute Scalar" LogicalOp="Compute Scalar" EstimateRows="1" EstimateIO="0" EstimateCPU="6.00326" AvgRowSize="11" EstimatedTotalSubtreeCost="0.0032832" Parallel="0" EstimateRebinds="0" EstimateRewinds="0">
                              <OutputList>
                                <ColumnReference Column="Expr1004" />
                              </OutputList>
                              <ComputeScalar>
                                <DefinedValues>
                                  <DefinedValue>
                                    <ColumnReference Column="Expr1004" />
                                    <ScalarOperator ScalarString="NULL">
                                      <Const ConstValue="NULL" />
                                    </ScalarOperator>
                                  </DefinedValue>
                                </DefinedValues>
                                <RelOp NodeId="5" PhysicalOp="Clustered Index Scan" LogicalOp="Clustered Index Scan" EstimateRows="1" EstimateIO="469.664" EstimateCPU="66.036" AvgRowSize="9" EstimatedTotalSubtreeCost="0.0032831" Parallel="0" EstimateRebinds="0" EstimateRewinds="0">
                                  <OutputList />
                                  <IndexScan Ordered="0" ForcedIndex="0" NoExpandHint="0">
                                    <DefinedValues />
                                    <Object Database="[Test]" Schema="[dbo]" Table="[Test]" Index="[PK_Test]" />
                                  </IndexScan>
                                </RelOp>
                              </ComputeScalar>
                            </RelOp>
                          </Segment>
                        </RelOp>
                      </ComputeScalar>
                    </RelOp>
                  </SequenceProject>
                </RelOp>
              </Top>
            </RelOp>
          </QueryPlan>
        </StmtSimple>
      </Statements>
    </Batch>
  </BatchSequence>
</ShowPlanXML>
Knyazev Alexey
Дата: 31.01.2009 17:40:29
Mnior
Дата: 31.01.2009 18:06:25
Knyazev Alexey, если бы было так банально. Нет, настройки правильные. Наблюдается что-то типа:
Стоимость злополучного оператора на зависит от количества данных (константа), стоимость всего запроса не зависит от данного оператора. Это видно если самому складывать стоимости по всей цепочке. (Стоимость оператора 1.2006568, а всего запроса 0.0032834 (0.0032831 - скан таблы))
Как я понимаю это выходит из-за специфических настроек крайних значений оптимизатора.