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"] })); 

在通过UniqueIDUserID查找DataTable中的数据时,这些示例是否可能具有更好的性能?

我认为您使用索引(性能)会混淆主键和约束(业务域模型)的使用。

外键可以影响优化器,并且通常在外键上创建索引。

在SQL Server世界中,主键通常与聚簇索引混淆,因为选择代理键(认为自动增量标识列)的次数通常是主键和聚簇索引。

本文可能很有用: ADO.NET 2.0中的DataSet和DataTable 。

回应你的评论:

使用DataView进行重复非主键搜索如果需要使用非主键数据重复搜索,请创建具有排序顺序的DataView。 这将创建一个可用于执行搜索的索引。 这最适合重复搜索,因为创建索引需要一些成本。

DataView对象公开Find和FindRows方法,以便您可以查询基础DataTable中的数据。 如果仅执行单个查询,则创建索引所需的处理会降低使用索引所获得的性能。

创建DataView对象时,请使用DataView构造函数,该构造函数将Sort,RowFilter和RowStateFilter值作为构造函数参数以及基础DataTable。 使用DataView构造函数可确保索引构建一次。 如果您创建一个空的DataView并在之后设置Sort,RowFilter或RowStateFilter属性,则索引至少构建两次。

使用B树 (或其一些变体)实现DataTable 。 快速浏览一下Reflector,可以看出在DataTable类中有一个Index类加上LiveIndexes属性,这意味着有一些索引,但我真的不知道它们在哪里。

从我(真正有限的)经验来看:对PK的查询非常快。

一般而言,约束会减慢速度。 但是对于选择,唯一约束可以加快速度(但我可以找到MS参考),也可以根据选择限制。 我发现的大多数参考文献都谈到了限制减慢的限制因素。

因此,在您的情况下,它可以提高性能。

http://msdn.microsoft.com/en-us/library/49z48hxc.aspx