2010-03-24 28 views
2

我目前正在使用MS SQL Server 2008,但我不确定它是否是此特定任务的最佳系统。什么是最适合我需求的数据库?

我有一个表,如下所示:

PK_ptA PK_ptB DateInserted LookupColA LookupColB ... LookupColF DataCol (ntext) 

共同询问是

SELECT TOP(1000000) DataCol FROM table 
WHERE LookupColA=x AND LookupColD=y AND LookupColE=z 
ORDER BY DateInserted DESC 

表有大约十亿行有500万,每天插入。

我与SQL Server的主要问题是,它不是太容易碎片或分散的数据文件。另外,出口似乎最大为每秒1000行(约1MB/s),看起来非常慢。

我的另一个问题是,与SQL Server,如果我想添加一个新的LookupCol日志文件增长巨大需要大量的很少使用的自由空间。

这个问题有没有明显的更好的解决方案?

+0

您能否介绍一下更多关于您正在存储的数据以及您想如何查询的信息? – 2010-03-24 12:02:54

+0

ar,我正在存储1k个文本文件(作为NTEXT存储在DataCol中)。我一般需要一次检索几百万个文件,并将它们放在磁盘上,合并为1MB的文本文件。 我需要能够根据LookupCols检索它们并按日期时间列排序。 – 2010-03-24 12:41:55

回答

3

您遇到问题,它不是SQL Server。让我也忽略你似乎是一个糟糕的桌子设计。

  • 传播数据文件其实很简单。以后重组并不那么容易,但也是可行的。你的表格,文件组和文件格式如何?
  • 导出1mb每秒是一个笑话。认真。我已经在几分钟内处理了1.5亿行文件 - 每分钟可以运行超过60,000行。有些东西吓坏了。临时空间?你做过性能分析吗?硬件看起来如何?
  • 没有什么可用于日志使用。基本上像大多数专业数据库一样,日志包含事务期间所有更改的数据库页面。添加字段更改 - 所有页面。

你应该:

  • 重新设计数据库(使用视图来保持相同的旧表的地方,如果你ahve到),所以它不会ahve“LookupColA”等等,但归(LookupValue,以及由“列”编码的LookuPTable)。这样你可以获得即时的附加字段。这变成了像星型模式这样的数据仓库。
  • 做一个性能分析。看起来你有些问题。
  • 肯定的告诉我们,阿布硬件;)

这里这个问题绝对不是SQL服务器,它关系到坏表的设计和 - 可能 - 严重利用的硬件 - 不足。

+0

谢谢TomTom。 Serverwise我正在使用DELL MD3000,配备RAID 5的13 x 15kRPM 300GB硬盘和配备16GB RAM,Windows 2003 x64的 T710,2.66GHz X5550。 整个表数据存储在RAID阵列中。我没有拆分文件组。 我不太喜欢你的餐桌设计建议。你能稍微扩大你的建议吗? – 2010-03-24 12:39:26

+0

RAID 5在更新过程中会变慢 - 写入操作可能会导致读取性能下降。对于表建议单独的答案;)如果你没有调整你的表,可能是由于其上的非对齐分区(高达40%io性能浪费)而导致很多性能下降。我认为你遇到了一个IO问题,这部分问题在你身上(例如:坏的安装,坏的RAID布局)。 – TomTom 2010-03-24 12:40:52

0

好吧,表设计(单独的答案)。 Lokup是低音查找表。

因此....

  • LookupTable中
  • PK(INT)
  • TABLETYPE
  • 值 作为vields

  • ValueTable

  • PK

  • ValueLookupMap吨ValueTable进入

  • PK LookupTable中进入的能

  • PK

所以,基本上,如果你添加一个查找“场”,那么你只需要创建一套LookupTable中的条目,然后在添加条目ValueLookupMap。

相关问题