我应该使用什么样的计算机规格(CPU、RAM、磁盘速度)来对包含 2 亿多条记录的数据库运行查询?查询用于研究项目,因此只有一个“用户”,并且一次只能运行一个查询。
我在自己的笔记本电脑上尝试了 SQL Server,该笔记本电脑配备 i3 处理器、2GB RAM、5400 RPM 磁盘,一个简单的查询甚至在 8 个多小时后也没有完成。我可以选择通过 eSata 连接 SSD 并升级到 4GB RAM,但不确定这是否足够...
谢谢!
编辑:数据库大约有 25 GB,索引设置不正确。当我尝试添加索引时,我让它运行了大约 8 个小时,但仍然没有完成,所以我放弃了。我应该有更多的耐心吗 :)?
一般来说,查询会偶尔运行一次,即使需要几个小时才能完成也没关系......
此外,查询可能会产生大约 1000 万条记录,我需要使用 Stata/Matlab 来处理这些记录,我担心我当前的笔记本电脑性能不够强大,但不确定瓶颈在哪里……
答案1
为大型数据库指定硬件是一件非常困难的事情。我们有几个大型数据库(一些表中有 900 多万条记录)和一个庞大的数据库(大多数表中有 3 亿多条记录),甚至对我们来说,这也是一件有点碰运气的事情。
但是与硬件规格同样重要的是数据库模式,正如 Ira 提到的,索引在这种情况下是王道。
创建索引将花费远超过 8 小时的时间,并且必须完全解锁表,因为创建索引会锁定整个表。创建索引需要很长时间通常是锁定表的标志,因此在尝试执行此操作时,请确保没有其他任何程序正在使用数据库。
在这种情况下,磁盘速度会让您更难处理。单个 5400 RPM 硬盘(我见过主轴速度更慢的笔记本电脑,对于笔记本电脑来说 5400 RPM 已经很不错了)将数据加载到缓存中进行索引所需的时间比 15,000 RPM 硬盘长得多。作为比较,我们的 SQL 服务器有 14 个 15,000 RPM 磁盘(总共 210,000 RPM,或高达 38 倍的主轴速度,我猜实际访问速度可能快 50 倍),我预计在 200M 记录上创建索引仍需要一个多小时。
所以,如果可以的话,就买固态硬盘吧。它会有很大的帮助。固态硬盘相对于 5400 RPM 硬盘的性能提升几乎是不可估量的。
如果可以,请购买 4Gb RAM。它不仅有助于提高 SQL 服务器速度(虽然不如 SSD 快,但仍有帮助),而且从我使用 Matlab 的(短暂)经验来看,它也有帮助。
答案2
您没有抱怨用 2 亿条记录填充数据库需要多长时间,因此我得出结论,您的笔记本电脑足够快。
数据库之所以有效,是因为它们存储数据记录时会使用某些已编入索引的“关键”字段,从而提供快速访问。(否则,每次查询都必须读取每条记录,而 25Gb 的数据需要很长时间才能读取)。
如果您的查询应该产生适量的结果(例如,10K 条记录),我猜您的问题是您的记录没有被查询的主要元素索引。