【发布时间】:2011-09-01 12:16:13
【问题描述】:
我开始从事一个项目,该项目必须重用一个 Microsoft SQL Server 2008 旧数据库,该数据库有一个包含超过 7,000,000 条记录的表。
最后几分钟对该表进行了查询,我想知道其他类型的数据库(即非关系型)是否会更好地处理这个问题。
你有什么推荐的?无论如何,有没有办法提高关系数据库的性能?
谢谢
更新:
我正在使用 Navicat 执行这个简单的查询:
SELECT DISTINCT [NROCAJA]
FROM [CAJASE]
如此复杂的东西和子查询不是问题。我还想知道是否缺少索引是问题所在,但该表似乎已编入索引:
史诗般的失败:
数据库在远程服务器中!!查询实际上需要 5 秒(我仍然认为这是很多时间,但现在问题不同了)。所用时间的 99% 是网络传输。无论如何感谢您的回答:)
【问题讨论】:
-
7M 记录不算多 - 如果您能提供更多信息,我们可以查看索引、计划等。
-
这太笼统了,无法回答。但是,如果构造正确,SQL Server 可以很好地处理数十亿条记录表。我猜你没有合适的索引来启动。
-
@elitalon - 编辑后,在 7,000,000 行表中,
NROCAJA有多少个DISTINCT值?如果相对较少,则可以使用递归 CTE 来优化它,或者您可以使用索引视图 (related),如果有很多,则很可能是网络问题推回数据. -
另外,您是否在该表上发生了并发数据修改?您的选择查询可能会遇到阻塞。或者您可能没有足够的 RAM,并且每次需要查找瓶颈时都需要从磁盘中导入数据。我建议阅读一本关于性能调优的书。
-
SELECT COUNT (DISTINCT [NROCAJA]) FROM [CAJASE]需要多长时间?这将做同样的工作,但会消除大部分网络流量。另外,如果这仍然需要很长时间,请尝试SELECT COUNT (DISTINCT [NROCAJA]) FROM [CAJASE] WITH (NOLOCK)看看是否阻塞可能是罪魁祸首。
标签: database performance sql-server-2008 scalability