43

より良いとは、パフォーマンスが限界を超えて向上するということですか?

つまり、 を呼び出すたびに、サーバーはその値を返すためGETDATE()にどのくらいの作業を行うのでしょうか?

ストアド プロシージャの多くの場所で使用GETDATE()している場合、代わりにトランザクションの日付を格納する変数を作成する必要がありますか?

declare @transDate datetime = GETDATE()

ベンチマークデータは素晴らしいでしょう。

EDIT明確にしたい: 私は主に、これら 2 つの可能性の実際のパフォーマンスの違いと、それが重要であるかどうかに関心があります。

4

5 に答える 5

18

私の提案は、主に変数を使用することです。これは、実行時間の長いプロセスGetDate()がある場合、呼び出し間で値が異なる可能性があるためです。

Dateの一部のみを使用してGetDate()いる場合を除き、常に同じ値を使用していることを確認できます。

于 2012-08-22T17:20:12.147 に答える
3

getdate()または のような関数で変数を使用する理由の 1 つsuser_sname()は、行を挿入する場合、またはGROUP BY. 大量の行を挿入すると、これに気付くでしょう。

300GB のデータをいくつかのテーブルに移行する際に、私自身がこれに苦しみました。

于 2016-02-25T00:28:35.230 に答える
2

GETDATE() 関数を SP 内の変数として使用して、いくつかのストアドプロシージャをテストしていましたが、クエリ オプティマイザーが操作する値がわからないため、IO 読み取りと実行時間が増加していました。パラメーター、変数、およびリテラルを使用したプロシージャーの実行。@Gordon Linoffがその値は実行中に変更されない、またはその考えを回避/削除するために、SP のすべての部分で GETDATE() 関数を使用できると述べました。値が変わる可能性があります。この方法でパラメーターを作成しました。

CREATE PROC TestGetdate
(
@CurrentDate DATETIME = NULL
)
AS
SET CurrentDate  = GETDATE()

.....そして、適切と思われるパラメータを使用すると、良い結果が得られます

コメントや提案は大歓迎です。

于 2017-05-25T15:30:05.547 に答える
0

使った

WHERE ActualDateShipped+30 > dbo.Today()

以下の機能と組み合わせて使用​​します。クエリ時間が 13 秒から 2 秒になりました。この投稿の以前の回答は、SQL 2008/R2 でこの問題を解決する助けにはなりませんでした。

CREATE FUNCTION [dbo].[Today]()

    RETURNS date
    AS
    BEGIN

        DECLARE @today date = getdate()

        RETURN @today
    End
于 2016-09-09T01:00:34.453 に答える