日期:2014-05-17  浏览次数:20504 次

表中数据删除很慢,有几个外键,怎么办?
这个表中有6个关联别的表的外键,和2个被别的表管理的外键。
这个表的数据量有一百多万条记录。
被关联的两个表的数据量大概有三百多万条记录。
其余表都很小,现在要删除300多条记录,超级慢,要十几分钟。

删除语句如下
Delete From [T_FeeItem]
Where PID In(Select PID From T_PID Where OrgTask = 2346 And Status = 0)

其中T_PID 表的数据有几十万条记录
即使我使用这样的删除语句,也同样速度较慢。
Delete From [T_FeeItem]
Where PID = 100000

select

------解决方案--------------------
你有用级联删除吗?
------解决方案--------------------
查看一下执行计划..看哪个环节的成本较高.
------解决方案--------------------
禁用外键 然后删除 然后在启用外键
------解决方案--------------------
首先很明显,你17,18楼给出的计划跟1楼的语句是不对应的。 
根据你的计划,建如下索引,试一下。

CREATE NONCLUSTERED INDEX [NonClusteredIndex-20130510-194817] ON [dbo].[T_inspect_patientExamItem]
([patientFeeItem] ASC) 

CREATE NONCLUSTERED INDEX [NonClusteredIndex-20130510-194818] ON [dbo].[T_inspect_patientFeeItem]
([patient] ASC) 

CREATE NONCLUSTERED INDEX [NonClusteredIndex-20130510-195639] ON [dbo].[T_inspect_patient]
( [inspectOrgTask] ASC,
[patient] ASC
)