Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 为什么我的查询太慢sql server 2005_Sql Server 2005 - Fatal编程技术网

Sql server 2005 为什么我的查询太慢sql server 2005

Sql server 2005 为什么我的查询太慢sql server 2005,sql-server-2005,Sql Server 2005,我有两个表序列号,Org 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 REFERE

我有两个表序列号,Org

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)
我想把序列号(123456100)从组织A转移到组织B并标记 它被认为是被转移的 TransferdStatus=0(库存中) TransferdStatus=1(缺货)

这是我的查询,它的工作,但它太慢,当我想转移大量的序列号(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)

您正在一行一行地进行此操作,所以难怪在10公里的行中速度很慢。尝试修改您的过程,使其在表值参数而不是int上工作。tbv用法示例:
基于集合的操作肯定会更快。

表上有什么类型的索引?两个索引1:非聚集(组织id asc,序列号asc)2:非聚集(组织id asc,转移状态asc,序列号asc)是的,它适用于sql server 2008,但我使用的是sql server 2005。