优化小型数据表以获得最佳搜索(查询)速度

时间:2010-02-15 10:40:05

标签: c# performance

我有一个包含4列和N行的表。在开始时,N将在1000左右,并且趋向于增长到3000。

  • 1st:string unique
  • 2nd:具有N / 5个唯一值的int
  • 3rd:具有5个唯一值的int
  • 第4名:数据值

目标是使用不同的查询获取第4列的值,例如:“获取值,第1列为17”,或者:“获取第2列为7的所有值”,或者: “任何行都有这些数据”。大约40%的查询将在第4列完成,约30%与第3列相比,约20%第2列和~10%第1列。

由于每秒会有大约100个查询,并且每秒对这个表进行大约2次更改(添加/更新/删除),我想知道,管理这些数据的最快方式是什么(在C#中)?记忆不是问题

我目前正在使用SortedDictionary,其中键是第4个数据值;字典的值是包含前三个值的类。只需使用ContainsKey即可轻松验证“第4列”;当我使用其他值查询时:

foreach(var object in Objects) if(Objects[Data].2nd==object.Value.2nd) {...}

任何建议表示赞赏。

1 个答案:

答案 0 :(得分:1)

这是在数据库中的表上使用多少索引的等效问题。如果要在所有4列上快速查找,可以创建每个列类型的SortedDictionary,并使用相应的字典进行查找,但这将通过更新所有4个字典来增加添加/更新/删除时间(更不用说锁定了)。这一切都取决于您希望在不同列上更新和查找的速度。

但是,假设多列可以具有相同的数据,并且SortedDictionary依赖于唯一键值,您可能需要编写自己的数据结构或使用C#集合库中提供的MultiSet类之一(C5)想起来,但还有其他几个)