SQL Server上的大数据索引建议

时间:2014-04-26 17:47:16

标签: sql-server indexing

我准备将大约5亿行遥测数据导入SQL Server 2008 R2,我想确保我获得正确的索引/架构,以便快速搜索数据。我已经在数据库工作了一段时间,但没有这个规模。我希望我可以描述我的数据和应用程序,有人可以告诉我一个好的策略来索引它。

数据是来自数据收集系统的仪器读数,有3列:SentTime(datetime2(3)),Topic(nvarchar(255)和Value(float).SendTime精度为毫秒,是并非唯一。数据中有大约400个不同的主题(例如:" Voltage1"," PumpPressure"等),我的计划是将数据分成大约30个表,每个列有10-15列,分为逻辑分组,如电压,压力,温度等,每个都有自己的SentTime列。

典型的搜索将是检索给定时间范围内的各种值(可能跨越多个表)。另一种可能的搜索方式是检索给定值范围和主题的所有时间/值。用户界面将显示数据的粗略图形,以允许用户查找感兴趣的数据并将其导出为Excel或CSV。

我的主要问题是,如果我单独根据SentTime添加索引,那么该速度会搜索给定的时间范围吗?由于时间不是唯一的,因此在时间和价值上制作综合指数会更好吗?添加唯一主键的任何一点?我应该为这个应用程序看一下其他整体策略或架构吗?

另外请注意,导入完成后我不会插入任何数据,因此无需担心索引的插入开销。

1 个答案:

答案 0 :(得分:1)

您似乎将通过SentTime列进行大量范围搜索。在这种情况下,我会在SentTime上创建一个聚簇索引;使用非聚簇索引会有查找的开销(以检索其他数据)。 SentTime不是唯一的并不重要,引擎会为它添加一个uniquifier。

Topic列必须是nvarchar;为什么不是varchar?

我的关系自我将惩罚我,但似乎你不需要额外的PK。数据只读,对吧?

还有一个想法:检查sparse columns功能,它似乎非常适合你的场景。可能存在大量稀疏列(如果我没有记错,则高达10.000),它们可以作为XML进行分组和操作,主要的一点是NULL几乎是免费存储的。