2013-03-25 110 views
-1

我有兩條表SERIALNUMBER,組織爲什麼我的查詢速度太慢SQL Server 2005中

create table org(
    org_id INT NOT NULL IDENTITY(1,1)PRIMARY KEY CLUSTERED, 
    orgName VARCHAR(10) 
) 
create table serialNumber(id INT NOT NULL IDENTITY(1,1)PRIMARY KEY CLUSTERED, 
          org_id INT FOREIGN KEY REFERENCES org, 
          serialNumber BIGINT, 
          transferedStatus INT DEFAULT(0), 
          parentID INT NULL FOREIGN KEY REFERENCES serialNumber) 

insert into org values('ORG A') 
insert into org values('ORG B') 
insert into org values('ORG C') 
insert into org values('ORG D') 
insert into org values('ORG E') 

insert into serialNumber values(1,123456100,0,NULL) 
insert into serialNumber values(1,123456101,0,NULL) 
insert into serialNumber values(1,123456102,0,NULL) 
insert into serialNumber values(1,123456103,0,NULL) 
insert into serialNumber values(1,123456104,0,NULL) 
insert into serialNumber values(1,123456105,0,NULL) 

我想從一個ORG轉移SERIALNUMBER(123456100)爲org B和標記 它作爲轉移 transferedStatus = 0 (有貨) transferedStatus = 1(缺貨)

這是我的查詢它的工作,但它太慢,當我想要傳輸大量的serialNumber(10K)...我知道有其他的方式來做它但如何?!

declare @parentID int 
declare @From_org_id int 
declare @To_org_id int 
declare @serialNumber BIGINT 

set @From_org_id = 1 
set @To_org_id = 2 
set @serialNumber = 123456101 

/* mark the serialNumber as transfered */ 

UPDATE serialNumber        
set 
transferedStatus = 1 
Where 
org_id    = @From_org_id 
AND serialNumber = @serialNumber 

/* find ID of the source of Serial Number */ 
select TOP 1 @parentID = id 
FROM serialNumber 
Where org_id   = @From_org_id 
    AND transferedStatus = 1 
    AND serialNumber = @serialNumber 
ORDER BY id DESC 


insert into serialNumber values(@To_org_id,@serialNumber,0,@parentID) 

sqlfiddle LINK

+0

你的桌子上有什麼樣的指數? – 2013-03-25 10:03:20

+0

兩個索引1:NONCLUSTERED(org_id asc,serialNumber asc)2:NONCLUSTERED(org_id asc,transferedStatus asc,serialNumber asc) – 2013-03-25 10:58:57

回答