[英]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.