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

Откуда:
Сообщений: 165
Здравствуйте,

Поясните плиз как работают индексы с Between?

Есть такой запрос:

Select    
    tar.UpdateTUID, 
    tar.TUID, 
    tar.TravelerAccountRewardID,
    null,
    1
from dbo.TravelerAccountReward tar
where RewardRedeemStateID = 1 
and tar.UpdateDate between ( tar.UpdateDate between dateadd(second, @pTimeInterval2*(-1), dateadd(second, @pTimeInterval*(-1), current_timestamp)) and 
                                                    dateadd(second, @pTimeInterval*(-1), current_timestamp) )
значения для @pTimeInterval и @pTimeInterval2 подаются в качестве входных параметров хранимой процедуры.

Созданны отдельные индексы:
1)TravelerAccountRewardID - nonclustered unique primary key
2)TUID - clustered
3)UpdateDate - nonclustered

На плане все ок - Index Seek + Key Loop

Логично было бы сделать так:

declare @d1 smalldatetime, @d2 smalldatetime

select @d1 = dateadd(second, @pTimeInterval*(-1), current_timestamp) 
select @d2 = dateadd(second, @pTimeInterval2*(-1), dateadd(second, @pTimeInterval*(-1), current_timestamp))

Select    
    tar.UpdateTUID, 
    tar.TUID, 
    tar.TravelerAccountRewardID,
    null,
    1
from dbo.TravelerAccountReward tar
where RewardRedeemStateID = 1 and tar.UpdateDate between @d1 and @d2
Но...
Смотрю на план выполнения, и вижу, что при выполнении запроса создается еще один индекс:
Missing index (...): create nonclustered index .... on TravelerAccountReward (RewardRedeemStateID,UpdateDate) include (TravelerAccountRewardID, TUID)

Почему так выходит??? Мы же не используем в функциях никаких полей таблиц, только переменные!

P.S. MS SQL 2005

Спасибо.
22 июл 11, 18:50    [11014743]     Ответить | Цитировать Сообщить модератору
 Re: Between и индексы  [new]
whitebeast
Member

Откуда:
Сообщений: 165
Еще вопрос как эти два запроса будут вести себя на 13 млн. записей?
22 июл 11, 18:52    [11014748]     Ответить | Цитировать Сообщить модератору
 Re: Between и индексы  [new]
Baddy
Member

Откуда: Харьков
Сообщений: 174
индексы сами собой не создаются. это просто сиквел говорит, что по его мнению, неплохо было бы создать такой индекс.
22 июл 11, 19:02    [11014783]     Ответить | Цитировать Сообщить модератору
 Re: Between и индексы  [new]
whitebeast
Member

Откуда:
Сообщений: 165
Это да... Но почему скорость выполнения РАЗИТЕЛЬНО отличается во втором случае? В первом случае стоимость запроса 0.023, во втором 21.8
22 июл 11, 19:05    [11014796]     Ответить | Цитировать Сообщить модератору
 Re: Between и индексы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
whitebeast
Есть такой запрос:
Msg 156, Level 15, State 1, Line 9
Неправильный синтаксис около ключевого слова "between".

Реальный запрос-то какой?
22 июл 11, 19:11    [11014828]     Ответить | Цитировать Сообщить модератору
 Re: Between и индексы  [new]
whitebeast
Member

Откуда:
Сообщений: 165
alexeyvg, извиняюсь. задублировал tar.UpdateDate between.

Select    
    tar.UpdateTUID, 
    tar.TUID, 
    tar.TravelerAccountRewardID,
    null,
    1
from dbo.TravelerAccountReward tar
where RewardRedeemStateID = 1 
and ( tar.UpdateDate between dateadd(second, @pTimeInterval2*(-1), dateadd(second, @pTimeInterval*(-1), current_timestamp)) and 
                                                    dateadd(second, @pTimeInterval*(-1), current_timestamp) )
22 июл 11, 19:20    [11014863]     Ответить | Цитировать Сообщить модератору
 Re: Between и индексы  [new]
igor2222
Member

Откуда: Харків
Сообщений: 1233
А почему они должны совпадать? Первый запрос от @d2 до @d1, второй- наоборот
22 июл 11, 19:20    [11014864]     Ответить | Цитировать Сообщить модератору
 Re: Between и индексы  [new]
whitebeast
Member

Откуда:
Сообщений: 165
igor2222, Это уже я глючу под конец дня :(. Должно быть @d1 and @d2
22 июл 11, 19:23    [11014874]     Ответить | Цитировать Сообщить модератору
 Re: Between и индексы  [new]
whitebeast
Member

Откуда:
Сообщений: 165
Неужели поздно вопрос задал и все домой разъехались? :)
22 июл 11, 19:49    [11014975]     Ответить | Цитировать Сообщить модератору
 Re: Between и индексы  [new]
whitebeast
Member

Откуда:
Сообщений: 165
Уберем лишние гадости мешающие чтению запросов :)

--1 запрос 
declare @d1 smalldatetime, @d2 smalldatetime
select @d1 = '20110719', @d2 = '20110721'

Select  TravelerAccountRewardId,
        rewardid,
        TUID,
        UpdateTUID
from dbo.TravelerAccountReward tar
where rewardredeemstateid = 1 and tar.UpdateDate between @d1 and @d2  

-- 2 запрос
Select  TravelerAccountRewardId,
        rewardid,
        TUID,
        UpdateTUID
from dbo.TravelerAccountReward tar
where rewardredeemstateid = 1 and tar.UpdateDate between '20110719' and '20110721'

В приложении план выполнения.

Я никак не могу понять ЧЕМ таким они отличаются... Надеюсь на Вашу помощь

К сообщению приложен файл (plan.rpt - 10Kb) cкачать
22 июл 11, 20:52    [11015114]     Ответить | Цитировать Сообщить модератору
 Re: Between и индексы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
whitebeast
В приложении план выполнения.
И вы думаете, что все смогут открыть такой файл? Приложите просто план.
22 июл 11, 21:05    [11015142]     Ответить | Цитировать Сообщить модератору
 Re: Between и индексы  [new]
whitebeast
Member

Откуда:
Сообщений: 165
alexeyvg, Это обычный текстовый файл. просто расширение rpt.
Что в вашем понимании "просто план"? Графический вид? Текстовый? Если текстовый то насколько он должен быть детализирован? (хватит showplan_text или нужно showplan_all)?
22 июл 11, 21:33    [11015226]     Ответить | Цитировать Сообщить модератору
 Re: Between и индексы  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
whitebeast
alexeyvg, Это обычный текстовый файл. просто расширение rpt.
Что в вашем понимании "просто план"? Графический вид? Текстовый? Если текстовый то насколько он должен быть детализирован? (хватит showplan_text или нужно showplan_all)?
https://www.sql.ru/faq/faq_topic.aspx?fid=393
22 июл 11, 21:46    [11015277]     Ответить | Цитировать Сообщить модератору
 Re: Between и индексы  [new]
whitebeast
Member

Откуда:
Сообщений: 165
Уважаемый Гавриленко Сергей Алексеевич, я знаю как сделать план выполнения в текстовом виде. Дальше мне с ним что делать? Копипастить на форум? Или сделать файл txt?
Приложу навсякий случай переименованный plan.rpt в plan.txt (содержимое то же самое)

К сообщению приложен файл (plan.txt - 10Kb) cкачать
22 июл 11, 21:55    [11015295]     Ответить | Цитировать Сообщить модератору
 Re: Between и индексы  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
whitebeast
Уважаемый Гавриленко Сергей Алексеевич, я знаю как сделать план выполнения в текстовом виде. Дальше мне с ним что делать? Копипастить на форум? Или сделать файл txt?
Приложу навсякий случай переименованный plan.rpt в plan.txt (содержимое то же самое)
В теге src на форум. Желательно, актуальный план.
22 июл 11, 22:02    [11015312]     Ответить | Цитировать Сообщить модератору
 Re: Between и индексы  [new]
whitebeast
Member

Откуда:
Сообщений: 165
первый запрос:
Table 'TravelerAccountReward'. Scan count 3, logical reads 24557, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Rows                 Executes             StmtText                                                                                                                                                                                                                                                         StmtId      NodeId      Parent      PhysicalOp                     LogicalOp                      Argument                                                                                                                                                                                                                                                         DefinedValues                                                                        EstimateRows  EstimateIO    EstimateCPU   AvgRowSize  TotalSubtreeCost OutputList                                                                           Warnings Type                                                             Parallel EstimateExecutions
-------------------- -------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------- ----------- ----------- ------------------------------ ------------------------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------ ------------- ------------- ------------- ----------- ---------------- ------------------------------------------------------------------------------------ -------- ---------------------------------------------------------------- -------- ------------------
49                   1                    Select  TravelerAccountRewardId,
        rewardid,
        TUID,
        UpdateTUID
from dbo.TravelerAccountReward tar
where tar.UpdateDate between @d1 and @d2                                                                                             1           1           0           NULL                           NULL                           NULL                                                                                                                                                                                                                                                             NULL                                                                                 176840.4      NULL          NULL          NULL        18.88171         NULL                                                                                 NULL     SELECT                                                           0        NULL
49                   1                      |--Parallelism(Gather Streams)                                                                                                                                                                                                                                 1           2           1           Parallelism                    Gather Streams                 NULL                                                                                                                                                                                                                                                             NULL                                                                                 176840.4      0             0.395488      23          18.88171         [tar].[TravelerAccountRewardID], [tar].[TUID], [tar].[RewardID], [tar].[UpdateTUID]  NULL     PLAN_ROW                                                         1        1
49                   2                           |--Clustered Index Scan(OBJECT:([MTTWeb_5199_Perf].[dbo].[TravelerAccountReward].[XIE1TravelerAccountReward] AS [tar]), WHERE:([MTTWeb_5199_Perf].[dbo].[TravelerAccountReward].[UpdateDate] as [tar].[UpdateDate]>=[@d1] AND [MTTWeb_5199_Perf].[dbo].[T 1           3           2           Clustered Index Scan           Clustered Index Scan           OBJECT:([MTTWeb_5199_Perf].[dbo].[TravelerAccountReward].[XIE1TravelerAccountReward] AS [tar]), WHERE:([MTTWeb_5199_Perf].[dbo].[TravelerAccountReward].[UpdateDate] as [tar].[UpdateDate]>=[@d1] AND [MTTWeb_5199_Perf].[dbo].[TravelerAccountReward].[UpdateDa [tar].[TravelerAccountRewardID], [tar].[TUID], [tar].[RewardID], [tar].[UpdateTUID]  176840.4      16.5409       1.08077       27          17.62167         [tar].[TravelerAccountRewardID], [tar].[TUID], [tar].[RewardID], [tar].[UpdateTUID]  NULL     PLAN_ROW                                                         1        1

второй запрос:
Table 'TravelerAccountReward'. Scan count 1, logical reads 163, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Rows                 Executes             StmtText                                                                                                                                                                                                                                                         StmtId      NodeId      Parent      PhysicalOp                     LogicalOp                      Argument                                                                                                                                                                                                                                                         DefinedValues                                        EstimateRows  EstimateIO    EstimateCPU   AvgRowSize  TotalSubtreeCost OutputList                                                                           Warnings Type                                                             Parallel EstimateExecutions
-------------------- -------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------- ----------- ----------- ------------------------------ ------------------------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------- ------------- ------------- ------------- ----------- ---------------- ------------------------------------------------------------------------------------ -------- ---------------------------------------------------------------- -------- ------------------
49                   1                    SELECT [TravelerAccountRewardId],[rewardid],[TUID],[UpdateTUID] FROM [dbo].[TravelerAccountReward] [tar] WHERE [tar].[UpdateDate]>=@1 AND [tar].[UpdateDate]<=@2                                                                                                 3           1           0           NULL                           NULL                           NULL                                                                                                                                                                                                                                                             NULL                                                 703.2849      NULL          NULL          NULL        2.279457         NULL                                                                                 NULL     SELECT                                                           0        NULL
49                   1                      |--Nested Loops(Inner Join, OUTER REFERENCES:([Uniq1002], [tar].[TUID], [tar].[RewardID], [Expr1005]) OPTIMIZED WITH UNORDERED PREFETCH)                                                                                                                       3           2           1           Nested Loops                   Inner Join                     OUTER REFERENCES:([Uniq1002], [tar].[TUID], [tar].[RewardID], [Expr1005]) OPTIMIZED WITH UNORDERED PREFETCH                                                                                                                                                      NULL                                                 703.2849      0             0.002939731   23          2.279457         [tar].[TravelerAccountRewardID], [tar].[TUID], [tar].[RewardID], [tar].[UpdateTUID]  NULL     PLAN_ROW                                                         0        1
49                   1                           |--Index Seek(OBJECT:([MTTWeb_5199_Perf].[dbo].[TravelerAccountReward].[XIE2TravelerAccountReward] AS [tar]), SEEK:([tar].[UpdateDate] >= '2011-07-19 00:00:00.000' AND [tar].[UpdateDate] <= '2011-07-21 00:00:00.000') ORDERED FORWARD)                 3           5           2           Index Seek                     Index Seek                     OBJECT:([MTTWeb_5199_Perf].[dbo].[TravelerAccountReward].[XIE2TravelerAccountReward] AS [tar]), SEEK:([tar].[UpdateDate] >= '2011-07-19 00:00:00.000' AND [tar].[UpdateDate] <= '2011-07-21 00:00:00.000') ORDERED FORWARD                                       [Uniq1002], [tar].[TUID], [tar].[RewardID]           703.2849      0.003865741   0.0009306134  19          0.004796354      [Uniq1002], [tar].[TUID], [tar].[RewardID]                                           NULL     PLAN_ROW                                                         0        1
49                   49                          |--Clustered Index Seek(OBJECT:([MTTWeb_5199_Perf].[dbo].[TravelerAccountReward].[XIE1TravelerAccountReward] AS [tar]), SEEK:([tar].[TUID]=[MTTWeb_5199_Perf].[dbo].[TravelerAccountReward].[TUID] as [tar].[TUID] AND [tar].[RewardID]=[MTTWeb_5199_Perf 3           7           2           Clustered Index Seek           Clustered Index Seek           OBJECT:([MTTWeb_5199_Perf].[dbo].[TravelerAccountReward].[XIE1TravelerAccountReward] AS [tar]), SEEK:([tar].[TUID]=[MTTWeb_5199_Perf].[dbo].[TravelerAccountReward].[TUID] as [tar].[TUID] AND [tar].[RewardID]=[MTTWeb_5199_Perf].[dbo].[TravelerAccountReward] [tar].[TravelerAccountRewardID], [tar].[UpdateTUID]  1             0.003125      0.0001581     15          2.271721         [tar].[TravelerAccountRewardID], [tar].[UpdateTUID]                                  NULL     PLAN_ROW                                                         0        703.2849
22 июл 11, 22:26    [11015367]     Ответить | Цитировать Сообщить модератору
 Re: Between и индексы  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
whitebeast
Я никак не могу понять ЧЕМ таким они отличаются... Надеюсь на Вашу помощь


Отличаются они тем, что во 2-м случае сервер знает что результатом выборки будут данные за 2 дня и на основании статистики может примерно прикинить сколько это будет в строках и какой оптимальный план выбрать. В первом же случае, в момент построения плана, значения переменных неизвестны, следовательно создаётся усреднённый план.

OPTION (RECOMPILE) вам поможет, только смотрите реальный план и не предполагаемый.
23 июл 11, 02:33    [11016089]     Ответить | Цитировать Сообщить модератору
 Re: Between и индексы  [new]
whitebeast
Member

Откуда:
Сообщений: 165
Спасибо за подсказку! Надо будет попробовать...

А как будет вести себя такой запрос при работе с таблицей на 13 миллионов записей?
25 июл 11, 00:05    [11020537]     Ответить | Цитировать Сообщить модератору
 Re: Between и индексы  [new]
whitebeast
Member

Откуда:
Сообщений: 165
Хех... Уже ведут себя одинаково.


Rows                 Executes             StmtText                                                                                                                                                                                                                                                         StmtId      NodeId      Parent      PhysicalOp                     LogicalOp                      Argument                                                                                                                                                                                                                                                         DefinedValues                                        EstimateRows  EstimateIO    EstimateCPU   AvgRowSize  TotalSubtreeCost OutputList                                                                           Warnings Type                                                             Parallel EstimateExecutions
-------------------- -------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------- ----------- ----------- ------------------------------ ------------------------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------- ------------- ------------- ------------- ----------- ---------------- ------------------------------------------------------------------------------------ -------- ---------------------------------------------------------------- -------- ------------------
49                   1                    Select  TravelerAccountRewardId,
        rewardid,
        TUID,
        UpdateTUID
from dbo.TravelerAccountReward tar
where tar.UpdateDate between @d1 and @d2  
option (recompile)                                                                       1           1           0           NULL                           NULL                           NULL                                                                                                                                                                                                                                                             NULL                                                 703.2849      NULL          NULL          NULL        2.279457         NULL                                                                                 NULL     SELECT                                                           0        NULL
49                   1                      |--Nested Loops(Inner Join, OUTER REFERENCES:([Uniq1002], [tar].[TUID], [tar].[RewardID], [Expr1003]) OPTIMIZED WITH UNORDERED PREFETCH)                                                                                                                       1           2           1           Nested Loops                   Inner Join                     OUTER REFERENCES:([Uniq1002], [tar].[TUID], [tar].[RewardID], [Expr1003]) OPTIMIZED WITH UNORDERED PREFETCH                                                                                                                                                      NULL                                                 703.2849      0             0.002939731   23          2.279457         [tar].[TravelerAccountRewardID], [tar].[TUID], [tar].[RewardID], [tar].[UpdateTUID]  NULL     PLAN_ROW                                                         0        1
49                   1                           |--Index Seek(OBJECT:([MTTWeb_5199_Perf].[dbo].[TravelerAccountReward].[XIE2TravelerAccountReward] AS [tar]), SEEK:([tar].[UpdateDate] >= [@d1] AND [tar].[UpdateDate] <= [@d2]) ORDERED FORWARD)                                                         1           5           2           Index Seek                     Index Seek                     OBJECT:([MTTWeb_5199_Perf].[dbo].[TravelerAccountReward].[XIE2TravelerAccountReward] AS [tar]), SEEK:([tar].[UpdateDate] >= [@d1] AND [tar].[UpdateDate] <= [@d2]) ORDERED FORWARD                                                                               [Uniq1002], [tar].[TUID], [tar].[RewardID]           703.2849      0.003865741   0.0009306134  19          0.004796354      [Uniq1002], [tar].[TUID], [tar].[RewardID]                                           NULL     PLAN_ROW                                                         0        1
49                   49                          |--Clustered Index Seek(OBJECT:([MTTWeb_5199_Perf].[dbo].[TravelerAccountReward].[XIE1TravelerAccountReward] AS [tar]), SEEK:([tar].[TUID]=[MTTWeb_5199_Perf].[dbo].[TravelerAccountReward].[TUID] as [tar].[TUID] AND [tar].[RewardID]=[MTTWeb_5199_Perf 1           7           2           Clustered Index Seek           Clustered Index Seek           OBJECT:([MTTWeb_5199_Perf].[dbo].[TravelerAccountReward].[XIE1TravelerAccountReward] AS [tar]), SEEK:([tar].[TUID]=[MTTWeb_5199_Perf].[dbo].[TravelerAccountReward].[TUID] as [tar].[TUID] AND [tar].[RewardID]=[MTTWeb_5199_Perf].[dbo].[TravelerAccountReward] [tar].[TravelerAccountRewardID], [tar].[UpdateTUID]  1             0.003125      0.0001581     15          2.271721         [tar].[TravelerAccountRewardID], [tar].[UpdateTUID]                                  NULL     PLAN_ROW                                                         0        703.2849

и

Rows                 Executes             StmtText                                                                                                                                                                                                                                                         StmtId      NodeId      Parent      PhysicalOp                     LogicalOp                      Argument                                                                                                                                                                                                                                                         DefinedValues                                        EstimateRows  EstimateIO    EstimateCPU   AvgRowSize  TotalSubtreeCost OutputList                                                                           Warnings Type                                                             Parallel EstimateExecutions
-------------------- -------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------- ----------- ----------- ------------------------------ ------------------------------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------- ------------- ------------- ------------- ----------- ---------------- ------------------------------------------------------------------------------------ -------- ---------------------------------------------------------------- -------- ------------------
49                   1                    Select  TravelerAccountRewardId,
        rewardid,
        TUID,
        UpdateTUID
from dbo.TravelerAccountReward tar
where  tar.UpdateDate between '20110719' and '20110721'
option (recompile)                                                          3           1           0           NULL                           NULL                           NULL                                                                                                                                                                                                                                                             NULL                                                 703.2849      NULL          NULL          NULL        2.279457         NULL                                                                                 NULL     SELECT                                                           0        NULL
49                   1                      |--Nested Loops(Inner Join, OUTER REFERENCES:([Uniq1002], [tar].[TUID], [tar].[RewardID], [Expr1003]) OPTIMIZED WITH UNORDERED PREFETCH)                                                                                                                       3           2           1           Nested Loops                   Inner Join                     OUTER REFERENCES:([Uniq1002], [tar].[TUID], [tar].[RewardID], [Expr1003]) OPTIMIZED WITH UNORDERED PREFETCH                                                                                                                                                      NULL                                                 703.2849      0             0.002939731   23          2.279457         [tar].[TravelerAccountRewardID], [tar].[TUID], [tar].[RewardID], [tar].[UpdateTUID]  NULL     PLAN_ROW                                                         0        1
49                   1                           |--Index Seek(OBJECT:([MTTWeb_5199_Perf].[dbo].[TravelerAccountReward].[XIE2TravelerAccountReward] AS [tar]), SEEK:([tar].[UpdateDate] >= '2011-07-19 00:00:00.000' AND [tar].[UpdateDate] <= '2011-07-21 00:00:00.000') ORDERED FORWARD)                 3           5           2           Index Seek                     Index Seek                     OBJECT:([MTTWeb_5199_Perf].[dbo].[TravelerAccountReward].[XIE2TravelerAccountReward] AS [tar]), SEEK:([tar].[UpdateDate] >= '2011-07-19 00:00:00.000' AND [tar].[UpdateDate] <= '2011-07-21 00:00:00.000') ORDERED FORWARD                                       [Uniq1002], [tar].[TUID], [tar].[RewardID]           703.2849      0.003865741   0.0009306134  19          0.004796354      [Uniq1002], [tar].[TUID], [tar].[RewardID]                                           NULL     PLAN_ROW                                                         0        1
49                   49                          |--Clustered Index Seek(OBJECT:([MTTWeb_5199_Perf].[dbo].[TravelerAccountReward].[XIE1TravelerAccountReward] AS [tar]), SEEK:([tar].[TUID]=[MTTWeb_5199_Perf].[dbo].[TravelerAccountReward].[TUID] as [tar].[TUID] AND [tar].[RewardID]=[MTTWeb_5199_Perf 3           7           2           Clustered Index Seek           Clustered Index Seek           OBJECT:([MTTWeb_5199_Perf].[dbo].[TravelerAccountReward].[XIE1TravelerAccountReward] AS [tar]), SEEK:([tar].[TUID]=[MTTWeb_5199_Perf].[dbo].[TravelerAccountReward].[TUID] as [tar].[TUID] AND [tar].[RewardID]=[MTTWeb_5199_Perf].[dbo].[TravelerAccountReward] [tar].[TravelerAccountRewardID], [tar].[UpdateTUID]  1             0.003125      0.0001581     15          2.271721         [tar].[TravelerAccountRewardID], [tar].[UpdateTUID]                                  NULL     PLAN_ROW                                                         0        703.2849 

Но стоимость все равно высоковата... Буду копать дальше.

Всем большое спасибо!
25 июл 11, 11:45    [11021827]     Ответить | Цитировать Сообщить модератору
 Re: Between и индексы  [new]
Ray D
Member

Откуда: from the middle of nowhere
Сообщений: 3598
Блог
Для оригинального запроса "идеальный индекс":
TravelerAccountReward (RewardRedeemStateID,UpdateDate) include (все остальные выбираемые столбцы, кроме ключа кластерного индекса)

Для последнего запроса:
(UpdateDate) include (все остальные выбираемые столбцы, кроме ключа кластерного индекса)
25 июл 11, 11:54    [11021918]     Ответить | Цитировать Сообщить модератору
 Re: Between и индексы  [new]
whitebeast
Member

Откуда:
Сообщений: 165
Потестил с новыми индексами. Действительно стоило послушать сервер и Ray D - разница в скорости значительна.

Всем спасибо!
25 июл 11, 17:43    [11024525]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить