2017-04-19 71 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