[英]SQL QUERY TAKING TOO MUCH TIME WHEN SERACH ALL
當我運行具有特定結果的查詢時,我有一個查詢,它在不到 1 秒的時間內顯示結果。 但是當我搜索所有產品的結果時,它需要半小時。 我已經索引以及我從中檢索的表中包含 2 年少於 6000 行的數據,下面是我的代碼。
SELECT dbo.IItems.ItCode, dbo.IItems.ItCodeD AS [Item Code], dbo.IItems.ItHead AS Description,
dbo.dbfn_TotalAllSRInq_N(dbo.IItems.ItCode) AS QTY ,
dbo.dbfn_TotalALL_Classification_N(dbo.IItems.ItCode,'Display')
+ dbo.dbfn_TotalALL_Classification_N(dbo.IItems.ItCode,'Trading')
+ dbo.dbfn_TotalALL_Classification_N(dbo.IItems.ItCode,'FOC')
+ dbo.dbfn_TotalALL_Classification_N(dbo.IItems.ItCode,'Liquidation')
- dbo.dbfn_TotalALL_ClassificationBooked_N(dbo.IItems.ItCode) AS Trade,
dbo.dbfn_TotalALL_Classification_N(dbo.IItems.ItCode,'Damage') AS Damage ,
dbo.dbfn_TotalALL_ClassificationBooked_N(dbo.IItems.ItCode) AS Booked,
dbo.CRM_Services_D.Charges AS BottomPrice,
(dbo.CRM_Services_D.SM_Price +((dbo.CRM_Services_D.SM_Price * 0)/100)) AS [SM-Price],
dbo.CRM_Services_D.TagPrice AS Retail, dbo.CRM_Services_D.Pur_Price AS Purchase,
dbo.CRM_Services_D.Inst_Price AS Install, dbo.CRM_Services_D.FixPrice AS Fixed,
dbo.IBinCard.ColorCode , dbo.IBinCard.Mid ,
IBinCard.mid Brandid,''itHeadL3,'' itHeadL2,''itHeadL1,CRM_Services_D.HF_Price as [HF Price],
CRM_Services_D.WebPrice,
CRM_Services_D.comments as [comments],
CRM_Services_D.FCommission as [FCommission],
CRM_Services_D.SalesTax as [SalesTax]
FROM dbo.IItems
left Outer JOIN dbo.CRM_Services_M ON dbo.IItems.ItCode = dbo.CRM_Services_M.ItemCode
left outer JOIN dbo.CRM_Services_D ON
dbo.CRM_Services_M.Service_ID = dbo.CRM_Services_D.Service_ID
AND dbo.CRM_Services_M.POSID = dbo.CRM_Services_D.POSID
AND dbo.CRM_Services_D.StDate = ISNULL((Select Top 1 StDate
from CRM_Services_M M, CRM_Services_D D
Where M.Service_ID = D.Service_ID
and M.POSID = D.POSID
and M.ItemCode= dbo.IItems.itcode
and M.POSID in (1,1)
Order by StDate Desc), GetDate())
INNER JOIN dbo.IBinCard ON
dbo.IItems.ItCode = dbo.IBinCard.Itcode
and iitems.itstatus = 1
and isdisabled = 0
and dbo.CRM_Services_M.POSID = ISNULL((Select Top 1 M.POSID
from CRM_Services_M M,CRM_Services_D D
Where M.Service_ID = D.Service_ID
and M.POSID = D.POSID
and M.ItemCode= dbo.IItems.itcode
and M.POSID in (1,1)
Order by StDate Desc),1)
-- THIS IS THE POINT WHERE I WRITE ANY WORD ITS SHOWING RESULT IN 1 SEC IF I LEFT IT EMPTY ITS GO DOWN
AND IItems.ItHead like '%18cith13%'
--ORDER BY dbo.IItems.ITL1, dbo.IItems.Itl2, dbo.IItems.Itl3, dbo.IItems.Itl4
當我使用 items.ithead 運行查詢時,如 '%any word%' 查詢顯示結果非常快,但是當我完全放下空時。 如果有任何建議,請在此查詢中提供幫助。 問候, 馬克
dbo.IBinCard 上的內部聯接包含條件:
and dbo.CRM_Services_M.POSID = ISNULL((Select Top 1 M.POSID
from CRM_Services_M M,CRM_Services_D D
Where M.Service_ID = D.Service_ID
and M.POSID = D.POSID
and M.ItemCode= dbo.IItems.itcode
and M.POSID in (1,1)
Order by StDate Desc),1)
但:
dbo.CRM_Services_M.POSID = 1
相同,因為您需要M.POSID in (1,1)
的 M.POSID 並且如果缺少記錄,您也返回 1。FROM dbo.IItems
left Outer JOIN dbo.CRM_Services_M ON
dbo.IItems.ItCode = dbo.CRM_Services_M.ItemCode
AND dbo.CRM_Services_M.POSID = 1
left outer JOIN dbo.CRM_Services_D ON
dbo.CRM_Services_M.Service_ID = dbo.CRM_Services_D.Service_ID
AND dbo.CRM_Services_D.POSID = 1
AND dbo.CRM_Services_D.StDate = (Select max(StDate)
from CRM_Services_D D
Where dbo.CRM_Services_M = D.Service_ID
and D.POSID = 1)
INNER JOIN dbo.IBinCard ON
dbo.IItems.ItCode = dbo.IBinCard.Itcode
WHERE iitems.itstatus = 1
and isdisabled = 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.