我有一个名为Protocol的表,一个名为Eligibility的表,和一个Protocol_Eligibilty表,它们将这两个表映射在一起(一对多关系)。如果我想在协议表中创建条目的完美副本,并在Protocol_Eligibility表中创建所有需要的映射,从性能的角度来看,使用SQL视图会有帮助吗?协议将有大约1000行,资格将有大约200,我希望每个协议映射到约10个资格行和每个资格映射到协议中的100多行。什么时候SQL视图适合ASP.net MVC?
这里就是我如何与视图这样做:
var pel_original = (from pel in _documentDataModel.Protocol_Eligibility_View
where pel.pid == id
select pel);
Protocol_Eligibility newEligibility;
foreach (var pel_item in pel_original)
{
newEligibility = new Protocol_Eligibility();
newEligibility.Eligibility = (from pel in _documentDataModel.Eligibility
where pel.ID == pel_item.eid
select pel).First();
newEligibility.Protocol = newProtocol;
newEligibility.ordering = pel_item.ordering;
_documentDataModel.AddToProtocol_Eligibility(newEligibility);
}
这是没有的观点:
var pel_original = (from pel in _documentDataModel.Protocol_Eligibility
where pel.Protocol.ID == id
select pel);
Protocol_Eligibility newEligibility;
foreach (var pel_item in pel_original)
{
pel_item.EligibilityReference.Load();
newEligibility = new Protocol_Eligibility();
newEligibility.Eligibility = pel_item.Eligibility;
newEligibility.Protocol = newProtocol;
newEligibility.ordering = pel_item.ordering;
_documentDataModel.AddToProtocol_Eligibility(newEligibility);
}
如果有10个左右的表格,如资格和适当数量的链接表,每个表中具有相同数量的条目,那么怎么办?我有点担心,因为在“链接”表中克隆单个协议及其相关条目花费5秒左右的时间,并且现在表中的表格现在不足10%。 – sslepian 2010-03-29 23:44:00
复制条目与读取条目完全不同,因为在此过程中必须锁定许多对象。要在高连接环境中保持性能,您可以采取的主要措施是确保索引在所有密钥上的构造良好,并将所需的连接数量减少到最低要求(可能需要仔细地对数据进行非规范化) 。 – 2010-03-30 00:10:13