SQL-запрос требует времени для выполнения - PullRequest
0 голосов
/ 22 февраля 2019

В моей таблице 2 миллиона записей.Я хочу вставить данные в временную таблицу и использовать эту временную таблицу в моей процедуре.Но для вставки требуется 30 секунд.Подскажите пожалуйста, как сократить время?Я не могу показать фактический запрос.поэтому мой запрос в этом формате.

Примечание. Я уже использовал CTE.

;With Tmp_TableName
        as
        (
        SELECT  T1.A, T1.B, T1.C, T1.D, T1.E, T1.F, T1.G , T1.H
        FROM    TableName T1 WITH(NOLOCK)
        WHERE   T1.A = 1
                AND CONVERT( NVarchar, T1.H, 111) <= CONVERT( NVarchar, getdate(), 111)

        )
    SELECT  *
    FROM    Tmp_TableName T1 WITH(NOLOCK);

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Вы можете просто отфильтровать с помощью cast():

WHERE T1.A = 1 AND
      T1.H <= CAST(GETDATE() AS DATE) -- This assumes `T1.H` has no time. (i.e. 00:00:00);

Если в вашем операторе SELECT есть какое-либо поле, имеющее тип varchar/nvarchar(max), то оно может работать медленно, вы можете исключить его &проверь дальше.

Однако вы не включили в таблицу структуру таблиц, поэтому ответить на нее сложно.

0 голосов
/ 22 февраля 2019

Я бы порекомендовал исправить ваше предложение WHERE:

WHERE T1.A = 1 AND
      T1.H < DATEADD(DAY, 1, CAST(GETDATE() as DATE)0

. Тогда можно воспользоваться индексом для TABLE1(A, H).

.
...