ADO.NET DataTable约束如何影响性能?
对DataTable(例如PrimaryKey和UniqueContraint)的约束是否使选择效率更高,方式与SQL Server中的方式相同? 或者是他们对数据执行规则的唯一目的?
myDT.Constraints.Add("PK", myDT.Columns["UniqueID"], true); //add a primary key
myDT.Constrinats.Add(new UniqueConstraint(new DataColumn[] { //add a unique constraint for UserID
myDT.Columns["UserID"], myDT.Columns["UniqueID"]
}));
在通过UniqueID
或UserID
在DataTable中查找数据时,这些示例可能会有更好的性能吗?
我认为你将主键和约束(业务领域模型)的使用与索引(性能)的使用相混淆。
外键可以影响优化器,并且通常在外键上创建索引。
在SQL Server领域中,主键通常与Clustered索引相混淆,因为经常比替代键(认为自动增加标识列)被选为主键和聚簇索引。
本文可能会引起您的兴趣:ADO.NET 2.0中的DataSet和DataTable。
回应你的评论:
使用DataView进行重复性非主键搜索如果您需要使用非主键数据进行重复搜索,请创建一个具有排序顺序的DataView。 这会创建一个可用于执行搜索的索引。 这最适合重复搜索,因为创建索引需要一定的成本。
DataView对象公开Find和FindRows方法,以便您可以查询底层DataTable中的数据。 如果您只执行单个查询,则创建索引所需的处理会降低使用该索引所获得的性能。
在创建DataView对象时,请使用DataView构造函数,该构造函数将Sort,RowFilter和RowStateFilter值作为构造函数参数以及底层DataTable。 使用DataView构造函数可确保索引只构建一次。 如果您创建一个空的DataView并在之后设置Sort,RowFilter或RowStateFilter属性,则该索引至少构建两次。
DataTable
是使用B树(或其一些变体)实现的。 快速浏览一下Reflector表明,在DataTable
类中有一个Index
类和LiveIndexes
属性,这意味着有一些索引,但我不知道它们在哪里。
从我的(真正有限的)经验:对PK的查询非常快。
一般来说,约束会减慢速度。 但对于选择唯一约束可以加快速度(但我可以找到一个MS参考),也可能是基于选择有限。 我发现的大多数参考文献都讨论了限制放缓的限制因素。
所以在你的情况下,它可以提高性能。
http://msdn.microsoft.com/en-us/library/49z48hxc.aspx
链接地址: http://www.djcxy.com/p/42745.html上一篇: How do ADO.NET DataTable Constraints affect performance?