簡體   English   中英

SQL Server-查詢時間長且帶有硬編碼日期

[英]SQL Server - Query Taking Long Time with Hard Coded Dates

作為前提,此查詢正在db_links中使用oracle環境,並且當前正在TOAD中針對SQL Server數據庫執行該查詢。

我最初有一些日期變量,用戶可以輸入日期范圍,使用這些變量時,查詢將在15秒內執行。 當我硬編碼與手動插入變量中的相同日期時,查詢現在需要3.5分鍾。

當我對日期進行硬編碼而不使用日期變量時,為什么查詢從15秒變為3.5分鍾?

這是下面的查詢:

select TRANS.FGBTRNH_DOC_CODE,
       '' "calc1",
       TRANS.FGBTRNH_TRANS_DESC,
       case when TRANS.FGBTRNH_DR_CR_IND = 'C' then TRANS.FGBTRNH_TRANS_AMT *-1
              when TRANS.FGBTRNH_DR_CR_IND = 'D' then TRANS.FGBTRNH_TRANS_AMT
              end "calc2",
       CAST(TRANS.FGBTRNH_TRANS_DATE AS DATE) "calc3"
  from [BANTEST.UNWSP.EDU]..FIMSMGR.FGBTRNH TRANS
inner join [BANTEST.UNWSP.EDU]..FIMSMGR.FABINVH INVOICE on TRANS.FGBTRNH_DOC_CODE = INVOICE.FABINVH_CODE

where TRANS.FGBTRNH_ACCT_CODE = '19000'
       and TRANS.FGBTRNH_TRANS_DATE between convert(date,'08/01/2013') and convert(date,'08/31/2013')
       and TRANS.FGBTRNH_DOC_CODE not like 'J%'
       and TRANS.FGBTRNH_TRANS_DESC not like '%AMAZON%'
       and TRANS.FGBTRNH_POSTING_PERIOD <>'00'
       and ( TRANS.FGBTRNH_RUCL_CODE not like 'CA%'
         and TRANS.FGBTRNH_RUCL_CODE not like 'Y%' )

當我使用變量時,條件語句如下所示:

和:日期1和日期2之間的TRANS.FGBTRNH_TRANS_DATE

然后,Toad提示輸入:date1和:date2的值

唯一突出的是CONVERT 請嘗試不使用它,如下所示:

TRANS.FGBTRNH_TRANS_DATE between '2013-08-01' and '2013-08-31'

使用參數(“變量”)時,服務器可以重新利用執行計划,因為查詢與您已經執行的查詢相同。

如果不使用參數,則每次更改日期時,服務器都會將其識別為另一個查詢,並且必須建立新的執行計划,這需要時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM