2017-04-19 102 views
0

以無限的時間下面是我的SQL查詢
SQL查詢與使用順序時

select top(10) ClientCode 
FROM (((Branch INNER JOIN BusinessLocation ON 
Branch.BranchCode=BusinessLocation.BranchCode) 
INNER JOIN Center ON BusinessLocation.LocationCode = Center.LocationCode) 
INNER JOIN Groups ON Center.CenterCode = Groups.CenterCode) 
INNER JOIN Client ON Groups.GroupCode = Client.GroupCode 
WHERE 
((Client.CBStatus) IS NULL) AND ((Branch.PartnerName) in 
('SVCL','Edelweiss')) 
order by Client.ClientCode DESC 

當我爲了不運行它通過它運行良好,但爲了通過它沒有完成執行。這是爲什麼?

+0

你的桌子有多大?你有Client.ClientCode上的索引嗎? –

+0

合計1324738條記錄,Client.ClientCode上沒有索引 – Saurabh

+0

在連接列上添加索引。 –

回答

0

當您選擇使用TOP語句時,不必計算每行的計算和連接。當您嘗試訂購時,需要計算所有行的至少一個單元格。這是一個長查詢,因爲你的表很大,並且行爲沒有錯誤。不要讓沒有順序的快速運行查詢誤導您關於第二個查詢的複雜性。

您可以在客戶端代碼列上創建索引。這會加快速度。

+0

試圖與這一點,但仍然ewwwwwww CREATE NONCLUSTERED INDEX [clientcode_idx] ON [DBO] [客戶端] ( \t [ClientCode] ASC )WITH(PAD_INDEX = OFF,STATISTICS_NORECOMPUTE = OFF,SORT_IN_TEMPDB = OFF,DROP_EXISTING = OFF, ONLINE = OFF,ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS = ON)ON [PRIMARY] GO – Saurabh