Что не так с этой хранимой процедурой? - PullRequest
0 голосов
/ 11 января 2011

Мне нужно выполнить настройку на этом sp:

alter PROCEDURE Gaming.usp_DB_GetGameResultsByDateTime 
(@FromDateTime AS DATETIME2(7) = null ,
 @ToDateTime AS DATETIME2(7)   = null)
AS
   DECLARE @FromDateTime_Actual AS DATETIME2(7) , 
           @ToDateTime_Actual AS DATETIME2(7); 
   SET @FromDateTime_Actual = ISNULL(@FromDateTime, DATEADD (DAY, -1, SYSDATETIME()));
   SET @ToDateTime_Actual = ISNULL (@ToDateTime , SYSDATETIME ());

   SELECT  Id, GameTypeId, PlayerId,
           BetAmount, Profit, 
           DateAndTime
   FROM Gaming.GameResults
   WHERE DateAndTime >= @FromDateTime_Actual
     AND DateAndTime < @ToDateTime_Actual
   ORDER BY DateAndTime ASC;
GO

Что не так с этой хранимой процедурой? Как бы вы переписали эту хранимую процедуру?

Ответы [ 3 ]

2 голосов
/ 11 января 2011

В этой хранимой процедуре нет ничего плохого.

Вы можете сделать ее немного более читабельной, избавившись от переменных:

ALTER PROCEDURE
        Gaming.usp_DB_GetGameResultsByDateTime
        (
        @FromDateTime AS DATETIME2(7) = NULL ,
        @ToDateTime AS DATETIME2(7) = NULL
        )
AS
DECLARE
        SELECT  Id, GameTypeId, PlayerId, BetAmount, Profit, DateAndTime
        FROM    Gaming.GameResults
        WHERE   DateAndTime >= ISNULL (@FromDateTime , DATEADD (DAY , -1 , SYSDATETIME ()))
                AND DateAndTime < ISNULL (@ToDateTime , SYSDATETIME ())
        ORDER BY
                DateAndTime ASC
GO

и сделав ее более эффективной, создав индексна GameResults (DateAndTime)

0 голосов
/ 11 января 2011

Выглядит товар для меня, за исключением того, что я могу сделать

WHERE DateAndTime between @FromDateTime_Actual AND @ToDateTime_Actual

, но я не ожидаю, что это повлияет на производительность

Если вы хотите повысить производительность быстрее, вам, вероятно, стоит подуматьНапример, DateAndTime может послужить хорошим началом, BETWEEN включительно, который изменяет <@FromDateTime_Actual на <= @FromDateTime_Actual.Если вы действительно хотите, чтобы это не было включительно, и вы хотите, чтобы <code>BETWEEN, вы можете изменить способ, которым вы установили @ToDateTime_Actual, чтобы это произошло.

0 голосов
/ 11 января 2011

Исходя из того, что вы предоставили, процесс довольно прост. Если у вас есть проблемы с производительностью, убедитесь, что у вас есть индекс на DateAndTime, так как вся ваша фильтрация находится в этом поле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...