Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Теория: как сделать правильно/лучше?  [new]
Eugene_p1
Member

Откуда: Москва
Сообщений: 295
Добрый день!

Простой вопрос.

Если имеем таблицу средней ширины, скажем, 20 колонок, int/float/nvarchar(1000) примерно поровну.

Хотим приджойнить её, но при этом нас интересует 4 колонки.

Вопрос.
Будет ли
INNER JOIN (SELECT int1 as KeyField, int2, float1, nvarchar1 FROM TestTable) tstTbl ON srcTbl.int1=tstTbl.int1

быстрее чем
INNER JOIN TestTable tstTbl ON srcTbl.int1=tstTbl.int1


Насколько зависит от ширины таблицы TestTable ?
2 сен 13, 11:51    [14783229]     Ответить | Цитировать Сообщить модератору
 Re: Теория: как сделать правильно/лучше?  [new]
_djХомяГ
Guest
Зависит от индескса кластерного/неклстерныых а также вхождения/неввхождения данных колонок в индекс в случае, если не исаользуется кластерный индекс Анализируйте план
2 сен 13, 11:58    [14783259]     Ответить | Цитировать Сообщить модератору
 Re: Теория: как сделать правильно/лучше?  [new]
Eugene_p1
Member

Откуда: Москва
Сообщений: 295
_djХомяГ,

Вопрос теоретический, поэтому "анализируйте план" - не подходит.

Предполагаю, что int1 = ключевое, кластерный индекс.
2 сен 13, 12:04    [14783297]     Ответить | Цитировать Сообщить модератору
 Re: Теория: как сделать правильно/лучше?  [new]
_djХомяГ
Guest
Тогда так - теоретически если используется CLUSTERED INDEX SEEK то вероятно должно быть быстро , а практически анализируйте план)))
2 сен 13, 12:08    [14783325]     Ответить | Цитировать Сообщить модератору
 Re: Теория: как сделать правильно/лучше?  [new]
Eugene_p1
Member

Откуда: Москва
Сообщений: 295
Eugene_p1
INNER JOIN (SELECT int1 as KeyField, int2, float1, nvarchar1 FROM TestTable) tstTbl ON srcTbl.int1=tstTbl.int1


Ошибка.
Правильно будет так:
INNER JOIN (SELECT int1 as KeyField, int2, float1, nvarchar1 FROM TestTable) tstTbl ON srcTbl.int1=tstTbl.KeyField

Но это так, префекционизм. Суть понятна .
2 сен 13, 12:11    [14783345]     Ответить | Цитировать Сообщить модератору
 Re: Теория: как сделать правильно/лучше?  [new]
iap
Member

Откуда: Москва
Сообщений: 47052
А что, оптимизатор реально выбирает в подзапросе перечисленные там поля? А зачем? Он что - дурак?
2 сен 13, 12:11    [14783348]     Ответить | Цитировать Сообщить модератору
 Re: Теория: как сделать правильно/лучше?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Eugene_p1
Вопрос.
Будет ли
INNER JOIN (SELECT int1 as KeyField, int2, float1, nvarchar1 FROM TestTable) tstTbl ON srcTbl.int1=tstTbl.int1

быстрее чем
INNER JOIN TestTable tstTbl ON srcTbl.int1=tstTbl.int1

По скорости будет одинаково. А почему вы решили, что в первом запросе будет какое-то ускорение?
2 сен 13, 12:12    [14783356]     Ответить | Цитировать Сообщить модератору
 Re: Теория: как сделать правильно/лучше?  [new]
чч
Guest
Интересно.

План выполнения clustered index scan по одной и второй таблице (если int1 в обоих таблицах clustered primary key).
В обоих случаях все одинаково, за исключением Estimated row size (что естественно, т.к. мы выбираем только несколько колонок в одном из запросе).
Далее Hash join. А вот тут уже интересно:
Estimated CPU Cost, Estimated Operator Cost и Estimated Subtree Cost незначительно, но отличаются. И запрос с частью полей выполняется чуть-чуть, но быстрее.

Microsoft SQL Server 2012 - 11.0.2100.60 (X64)
2 сен 13, 12:26    [14783432]     Ответить | Цитировать Сообщить модератору
 Re: Теория: как сделать правильно/лучше?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
чч,

Репро давайте.
2 сен 13, 12:32    [14783487]     Ответить | Цитировать Сообщить модератору
 Re: Теория: как сделать правильно/лучше?  [new]
Eugene_p1
Member

Откуда: Москва
Сообщений: 295
Гость333
По скорости будет одинаково. А почему вы решили, что в первом запросе будет какое-то ускорение?


Я предположил, что может выбираться целая строка, даже если нужно несколько полей.

Наверное, оптимизатор всё же не дурак, и выбирает-таки только нужные поля.
2 сен 13, 13:32    [14783991]     Ответить | Цитировать Сообщить модератору
 Re: Теория: как сделать правильно/лучше?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31783
Eugene_p1
Вопрос.
Будет ли
INNER JOIN (SELECT int1 as KeyField, int2, float1, nvarchar1 FROM TestTable) tstTbl ON srcTbl.int1=tstTbl.int1


быстрее чем
INNER JOIN TestTable tstTbl ON srcTbl.int1=tstTbl.int1



Насколько зависит от ширины таблицы TestTable ?
Это одна форма одного и того же, разницы нету.
2 сен 13, 13:34    [14784008]     Ответить | Цитировать Сообщить модератору
 Re: Теория: как сделать правильно/лучше?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Eugene_p1
Наверное, оптимизатор всё же не дурак, и выбирает-таки только нужные поля.

В точку :-)
2 сен 13, 13:47    [14784107]     Ответить | Цитировать Сообщить модератору
 Re: Теория: как сделать правильно/лучше?  [new]
чч
Guest
Гость333,

вот планы в xml
+

<?xml version="1.0" encoding="utf-16"?>
<ShowPlanXML xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan" Version="1.2" Build="11.0.2100.60">
  <BatchSequence>
    <Batch>
      <Statements>
        <StmtSimple StatementText="Statement1" StatementId="1" StatementCompId="2" StatementType="SELECT" RetrievedFromCache="false" StatementSubTreeCost="13.3663" StatementEstRows="252409" StatementOptmLevel="FULL" QueryHash="0x2941F5263B8C86F6" QueryPlanHash="0x49576AA1702831A0">
          <StatementSetOptions QUOTED_IDENTIFIER="true" ARITHABORT="true" CONCAT_NULL_YIELDS_NULL="true" ANSI_NULLS="true" ANSI_PADDING="true" ANSI_WARNINGS="true" NUMERIC_ROUNDABORT="false" />
          <QueryPlan DegreeOfParallelism="0" MemoryGrant="4416" NonParallelPlanReason="MaxDOPSetToOne" CachedPlanSize="80" CompileTime="10" CompileCPU="10" CompileMemory="464">
            <MemoryGrantInfo SerialRequiredMemory="1024" SerialDesiredMemory="4416" RequiredMemory="1024" DesiredMemory="4416" RequestedMemory="4416" GrantWaitTime="0" GrantedMemory="4416" MaxUsedMemory="704" />
            <OptimizerHardwareDependentProperties EstimatedAvailableMemoryGrant="209703" EstimatedPagesCached="52425" EstimatedAvailableDegreeOfParallelism="1" />
            <RelOp NodeId="0" PhysicalOp="Hash Match" LogicalOp="Inner Join" EstimateRows="252409" EstimateIO="0" EstimateCPU="3.27387" AvgRowSize="268" EstimatedTotalSubtreeCost="13.3663" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row">
              <OutputList>
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column1" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column2" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column3" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column4" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column5" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column6" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column7" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column8" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column9" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column10" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column11" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column12" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column13" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column14" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column15" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column16" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column17" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column18" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column19" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column20" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column21" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column22" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Column="Column23" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Column="Column24" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Column="Column25" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Column="Column26" />
              </OutputList>
              <MemoryFractions Input="1" Output="1" />
              <RunTimeInformation>
                <RunTimeCountersPerThread Thread="0" ActualRows="21780" ActualEndOfScans="1" ActualExecutions="1" />
              </RunTimeInformation>
              <Hash>
                <DefinedValues />
                <HashKeysBuild>
                  <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Column="Column24" />
                </HashKeysBuild>
                <HashKeysProbe>
                  <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column9" />
                </HashKeysProbe>
                <ProbeResidual>
                  <ScalarOperator ScalarString="ScalarString1">
                    <Compare CompareOp="EQ">
                      <ScalarOperator>
                        <Identifier>
                          <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column9" />
                        </Identifier>
                      </ScalarOperator>
                      <ScalarOperator>
                        <Identifier>
                          <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Column="Column24" />
                        </Identifier>
                      </ScalarOperator>
                    </Compare>
                  </ScalarOperator>
                </ProbeResidual>
                <RelOp NodeId="1" PhysicalOp="Clustered Index Scan" LogicalOp="Clustered Index Scan" EstimateRows="2744" EstimateIO="0.0757176" EstimateCPU="0.0031754" AvgRowSize="41" EstimatedTotalSubtreeCost="0.078893" TableCardinality="2744" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row">
                  <OutputList>
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Column="Column23" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Column="Column24" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Column="Column25" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Column="Column26" />
                  </OutputList>
                  <RunTimeInformation>
                    <RunTimeCountersPerThread Thread="0" ActualRows="2744" ActualEndOfScans="1" ActualExecutions="1" />
                  </RunTimeInformation>
                  <IndexScan Ordered="0" ForcedIndex="0" ForceScan="0" NoExpandHint="0">
                    <DefinedValues>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Column="Column23" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Column="Column24" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Column="Column25" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Column="Column26" />
                      </DefinedValue>
                    </DefinedValues>
                    <Object Database="Database1" Schema="Schema1" Table="Table2" Index="Index1" IndexKind="Clustered" />
                  </IndexScan>
                </RelOp>
                <RelOp NodeId="2" PhysicalOp="Clustered Index Scan" LogicalOp="Clustered Index Scan" EstimateRows="252409" EstimateIO="9.73572" EstimateCPU="0.277807" AvgRowSize="233" EstimatedTotalSubtreeCost="10.0135" TableCardinality="252409" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row">
                  <OutputList>
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column1" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column2" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column3" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column4" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column5" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column6" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column7" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column8" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column9" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column10" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column11" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column12" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column13" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column14" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column15" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column16" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column17" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column18" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column19" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column20" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column21" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column22" />
                  </OutputList>
                  <RunTimeInformation>
                    <RunTimeCountersPerThread Thread="0" ActualRows="252409" ActualEndOfScans="1" ActualExecutions="1" />
                  </RunTimeInformation>
                  <IndexScan Ordered="0" ForcedIndex="0" ForceScan="0" NoExpandHint="0">
                    <DefinedValues>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column1" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column2" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column3" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column4" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column5" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column6" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column7" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column8" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column9" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column10" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column11" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column12" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column13" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column14" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column15" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column16" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column17" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column18" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column19" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column20" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column21" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column22" />
                      </DefinedValue>
                    </DefinedValues>
                    <Object Database="Database1" Schema="Schema1" Table="Table1" Index="Index2" Alias="Alias1" IndexKind="Clustered" />
                  </IndexScan>
                </RelOp>
              </Hash>
            </RelOp>
          </QueryPlan>
        </StmtSimple>
      </Statements>
    </Batch>
  </BatchSequence>
</ShowPlanXML>


<?xml version="1.0" encoding="utf-16"?>
<ShowPlanXML xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan" Version="1.2" Build="11.0.2100.60">
  <BatchSequence>
    <Batch>
      <Statements>
        <StmtSimple StatementText="Statement2" StatementId="2" StatementCompId="3" StatementType="SELECT" RetrievedFromCache="false" StatementSubTreeCost="13.8232" StatementEstRows="252409" StatementOptmLevel="FULL" QueryHash="0x6FB6BCF58753B6D5" QueryPlanHash="0x1AD41D04B307443">
          <StatementSetOptions QUOTED_IDENTIFIER="true" ARITHABORT="true" CONCAT_NULL_YIELDS_NULL="true" ANSI_NULLS="true" ANSI_PADDING="true" ANSI_WARNINGS="true" NUMERIC_ROUNDABORT="false" />
          <QueryPlan DegreeOfParallelism="0" MemoryGrant="9992" NonParallelPlanReason="MaxDOPSetToOne" CachedPlanSize="112" CompileTime="10" CompileCPU="10" CompileMemory="496">
            <MemoryGrantInfo SerialRequiredMemory="1024" SerialDesiredMemory="9992" RequiredMemory="1024" DesiredMemory="9992" RequestedMemory="9992" GrantWaitTime="0" GrantedMemory="9992" MaxUsedMemory="1216" />
            <OptimizerHardwareDependentProperties EstimatedAvailableMemoryGrant="209703" EstimatedPagesCached="52425" EstimatedAvailableDegreeOfParallelism="1" />
            <RelOp NodeId="0" PhysicalOp="Hash Match" LogicalOp="Inner Join" EstimateRows="252409" EstimateIO="0" EstimateCPU="3.73078" AvgRowSize="517" EstimatedTotalSubtreeCost="13.8232" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row">
              <OutputList>
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column1" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column2" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column3" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column4" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column5" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column6" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column7" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column8" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column9" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column10" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column11" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column12" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column13" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column14" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column15" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column16" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column17" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column18" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column19" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column20" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column21" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column22" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column23" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column24" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column25" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column5" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column27" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column28" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column29" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column30" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column31" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column20" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column32" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column33" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column34" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column35" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column36" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column26" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column37" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column3" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column38" />
                <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column39" />
              </OutputList>
              <MemoryFractions Input="1" Output="1" />
              <RunTimeInformation>
                <RunTimeCountersPerThread Thread="0" ActualRows="21780" ActualEndOfScans="1" ActualExecutions="1" />
              </RunTimeInformation>
              <Hash>
                <DefinedValues />
                <HashKeysBuild>
                  <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column24" />
                </HashKeysBuild>
                <HashKeysProbe>
                  <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column9" />
                </HashKeysProbe>
                <ProbeResidual>
                  <ScalarOperator ScalarString="ScalarString2">
                    <Compare CompareOp="EQ">
                      <ScalarOperator>
                        <Identifier>
                          <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column9" />
                        </Identifier>
                      </ScalarOperator>
                      <ScalarOperator>
                        <Identifier>
                          <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column24" />
                        </Identifier>
                      </ScalarOperator>
                    </Compare>
                  </ScalarOperator>
                </ProbeResidual>
                <RelOp NodeId="1" PhysicalOp="Clustered Index Scan" LogicalOp="Clustered Index Scan" EstimateRows="2744" EstimateIO="0.0757176" EstimateCPU="0.0031754" AvgRowSize="290" EstimatedTotalSubtreeCost="0.078893" TableCardinality="2744" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row">
                  <OutputList>
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column23" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column24" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column25" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column5" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column27" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column28" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column29" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column30" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column31" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column20" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column32" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column33" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column34" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column35" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column36" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column26" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column37" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column3" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column38" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column39" />
                  </OutputList>
                  <RunTimeInformation>
                    <RunTimeCountersPerThread Thread="0" ActualRows="2744" ActualEndOfScans="1" ActualExecutions="1" />
                  </RunTimeInformation>
                  <IndexScan Ordered="0" ForcedIndex="0" ForceScan="0" NoExpandHint="0">
                    <DefinedValues>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column23" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column24" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column25" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column5" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column27" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column28" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column29" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column30" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column31" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column20" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column32" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column33" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column34" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column35" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column36" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column26" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column37" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column3" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column38" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table2" Alias="Alias2" Column="Column39" />
                      </DefinedValue>
                    </DefinedValues>
                    <Object Database="Database1" Schema="Schema1" Table="Table2" Index="Index1" Alias="Alias2" IndexKind="Clustered" />
                  </IndexScan>
                </RelOp>
                <RelOp NodeId="2" PhysicalOp="Clustered Index Scan" LogicalOp="Clustered Index Scan" EstimateRows="252409" EstimateIO="9.73572" EstimateCPU="0.277807" AvgRowSize="233" EstimatedTotalSubtreeCost="10.0135" TableCardinality="252409" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row">
                  <OutputList>
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column1" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column2" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column3" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column4" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column5" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column6" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column7" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column8" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column9" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column10" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column11" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column12" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column13" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column14" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column15" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column16" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column17" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column18" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column19" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column20" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column21" />
                    <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column22" />
                  </OutputList>
                  <RunTimeInformation>
                    <RunTimeCountersPerThread Thread="0" ActualRows="252409" ActualEndOfScans="1" ActualExecutions="1" />
                  </RunTimeInformation>
                  <IndexScan Ordered="0" ForcedIndex="0" ForceScan="0" NoExpandHint="0">
                    <DefinedValues>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column1" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column2" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column3" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column4" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column5" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column6" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column7" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column8" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column9" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column10" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column11" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column12" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column13" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column14" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column15" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column16" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column17" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column18" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column19" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column20" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column21" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="Database1" Schema="Schema1" Table="Table1" Alias="Alias1" Column="Column22" />
                      </DefinedValue>
                    </DefinedValues>
                    <Object Database="Database1" Schema="Schema1" Table="Table1" Index="Index2" Alias="Alias1" IndexKind="Clustered" />
                  </IndexScan>
                </RelOp>
              </Hash>
            </RelOp>
          </QueryPlan>
        </StmtSimple>
      </Statements>
    </Batch>
  </BatchSequence>
</ShowPlanXML>]


Сообщение было отредактировано: 2 сен 13, 15:26
2 сен 13, 13:47    [14784110]     Ответить | Цитировать Сообщить модератору
 Re: Теория: как сделать правильно/лучше?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
чч,

А запросы, наверное, выглядят как "SELECT * FROM ..."?
2 сен 13, 14:05    [14784241]     Ответить | Цитировать Сообщить модератору
 Re: Теория: как сделать правильно/лучше?  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
чч,

Вы бы такие простыни убирали под спойлер, а лучше просто файлами планы прикладывать. Текст запроса покажите, есть подозрение, что у вас там в верхнем запросе просто select *.
2 сен 13, 14:12    [14784279]     Ответить | Цитировать Сообщить модератору
 Re: Теория: как сделать правильно/лучше?  [new]
Eugene_p1
Member

Откуда: Москва
Сообщений: 295
Гость333
Eugene_p1
Наверное, оптимизатор всё же не дурак, и выбирает-таки только нужные поля.

В точку :-)

Традиционно, умная мысля... :)
2 сен 13, 14:19    [14784315]     Ответить | Цитировать Сообщить модератору
 Re: Теория: как сделать правильно/лучше?  [new]
чч
Guest
Сорри, за простынь.

+ Создание таблиц

use tempdb

CREATE TABLE dbo.t2(
	[bonus] [decimal](18, 2) NOT NULL,
	c_id bigint NOT NULL,
	[datetime] [datetime] NOT NULL,
	[discount] [decimal](18, 2) NOT NULL,
	[haspositions] [int] NOT NULL,
	[number] [nvarchar](40) NOT NULL,
	[processed] [datetime] NOT NULL,
	[summ] [decimal](18, 2) NOT NULL,
	[summdiscounted] [decimal](18, 2) NOT NULL,
 CONSTRAINT [pk_cheque_cur] PRIMARY KEY CLUSTERED 
(
	c_id ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) 
)

GO



CREATE TABLE dbo.[t1](
	id bigint IDENTITY(-9223372036854775808,1) NOT NULL,
	[created_on] [datetime] NOT NULL,
	[value] [decimal](23, 10) NOT NULL,
	[discount] [decimal](23, 10) NOT NULL,
	[start_date] [datetime] NOT NULL,
	[finish_date] [datetime] NOT NULL,
	[remainder] [decimal](23, 10) NOT NULL,
	c_id bigint NULL,
	[parent_type_id] [int] NULL,
	[processed_date] [datetime] NULL,
	[disposed_date] [datetime] NULL,
	[old_finish_date] [datetime] NULL,
 CONSTRAINT [pk_t1] PRIMARY KEY CLUSTERED 
(
	id ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) 
) 
GO

SET ANSI_PADDING ON
GO

ALTER TABLE dbo.[t1] ADD  CONSTRAINT [df_t1_created_on]  DEFAULT (getdate()) FOR [created_on]
GO

ALTER TABLE dbo.[t1] ADD  CONSTRAINT [df_t1_value]  DEFAULT ((0)) FOR [value]
GO

ALTER TABLE dbo.[t1] ADD  CONSTRAINT [df_t1_discount]  DEFAULT ((0)) FOR [discount]
GO

ALTER TABLE dbo.[t1] ADD  CONSTRAINT [df_t1_start_date]  DEFAULT (getdate()) FOR [start_date]
GO

ALTER TABLE dbo.[t1] ADD  CONSTRAINT [df_t1_finish_date]  DEFAULT ('30000101') FOR [finish_date]
GO

ALTER TABLE dbo.[t1] ADD  CONSTRAINT [df_t1_remainder]  DEFAULT ((0)) FOR [remainder]
GO





ALTER TABLE dbo.[t1]  WITH CHECK ADD  CONSTRAINT [fk_t1_t2] FOREIGN KEY(c_id)
REFERENCES dbo.[t2] (c_id)
GO

ALTER TABLE dbo.[t1] CHECK CONSTRAINT [fk_t1_t2]
GO
GO




А вот запросы:
select * from dbo.t1 b
inner join (select bonus, [summ], datetime, c_id from dbo.t2) ch on ch.c_id = b.c_id
option (maxdop 1)

select * from dbo.t1 b
inner join dbo.t2 ch on ch.c_id = b.c_id
option (maxdop 1)
2 сен 13, 14:22    [14784342]     Ответить | Цитировать Сообщить модератору
 Re: Теория: как сделать правильно/лучше?  [new]
чч
Guest
SomewhereSomehow,

в обоих запросах select *
А как это влияет на план?
2 сен 13, 14:23    [14784347]     Ответить | Цитировать Сообщить модератору
 Re: Теория: как сделать правильно/лучше?  [new]
_djХомяГ
Guest
про bookmark/key lookup слышали? + сетевой траффик
2 сен 13, 14:29    [14784372]     Ответить | Цитировать Сообщить модератору
 Re: Теория: как сделать правильно/лучше?  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
чч,

Есть такая реляционная операция как проекция.
За реляционную проекцию в сиквеле select, "select *" - означает спроектировать в результат все поля нижележащего оператора.
Нижележащий оператор:
1) t1 join t2 - содержит все поля таблиц t1 и t2.
2) t1 join (select a from t2) as p - содержит все поля t1 и все поля "подпроекции" p. Проекция p в свою очередь выполняется только для поля a из таблицы t2, т.е. в итоге выражения содержит все поля таблицы t1 и одно поле t2.a.
В итоге,
--1
select * 
from 
	t1 
	join t2 on t1.a = t2.a 
-->
select 
	t1.a, 
	t1.b, 
	t2.a, 
	t2.b 
from 
	t1 
	join t2 on t1.a = t2.a

--2
select * 
from 
	t1 join (select a from t2) as p on t1.a = p.a
-->
select 
	t1.a, 
	t1.b, 
	p.a 
from 
	t1 join (select a from t2) as p on t1.a = p.a

в первом случае вы запрашиваете лишние столбцы, больше данных, объем бльше, хэш дороже, т.к. требуется больше памяти.

Оптимизатор принимает во-внимание какой должна быть итоговая проекция и умеет нормализовать логические выражения исключая то, что не нужно в результате. Позже на основе полученного набора столбцов, он может, например, выбирать какой индекс использовать, определять, является ли индекс покрывающим для данного набора столбцов, придется ли выполнять лукапы, может вместо этого лучше сделать сканирвоание кластерного индекса и т.д.
2 сен 13, 15:11    [14784667]     Ответить | Цитировать Сообщить модератору
 Re: Теория: как сделать правильно/лучше?  [new]
чч
Guest
SomewhereSomehow,

спасибо за разъяснение. Я уже понял, что сравнивал несравнимое. Вернее делал это некорректно.

_djХомяГ , нет, к сожалению, не слышал.
2 сен 13, 15:28    [14784777]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить