提高 SQL Server 数据库性能

3
我正在设计一个报告解决方案,它使用 SQL Server 2008 R2 作为后端数据库。数据库模式相当简单。一张名为 Calls 的表格,其中 CallId 是主键,还有一张名为 Events 的表格,该表格与 Calls 有外键关联,外键是 fk_CallId。
每个通话至少有6-7个事件,每天在数据库中记录的通话数量超过3000个。 我有点担心这种关系对查询性能的影响。如果在具有数百万行(Events)的表格上使用内部连接会严重降低性能,那么我可以将 CallerId 字段添加到 Events 表格中,不使用连接(尽管我将失去一些相关 Calls 表格上的信息)。
总的来说,我能做什么来确保性能良好吗?

3
100年后,你的数据库大约会有1亿行记录。由于这仍然是一个中等大小的数据库,所以我现在真的不会担心性能问题。关键在于确保你已经正确地为表建立了索引(当然也要运行在像样的硬件上)。 - Lieven Keersmaekers
@Lieven:感谢您的评论。但是,正如我在Oleg的答案中评论的那样,我估计每年events表格中有7,000,000+行。 - Kamyar
3
如果再过100年,它将变成7亿行。我最初的评论仍然适用。虽然我鼓励思考优化,但请确保不要陷入“过早优化”的陷阱。 - Lieven Keersmaekers
1个回答

3

这取决于你的表有多宽。

实际上,每天3000次调用并不算是很大的数据量,至少在前十年不是。

但是

如果你总是想要查询全部数据,那么应用程序的设计就有问题,改进某个特定地方的性能并不能治愈错误设计的所有缺点。

步骤如下:

  • 检查适当的索引(至少在连接(和查询)列上建立索引)
  • 检查你的查询 - 它们是否带给你想要的数据?唯一想要的数据?

1
那又怎样?我处理的数据库从2005年开始每天增加150万行,现在已经有数亿行和数TB的数据,但它仍然运作良好。一切都取决于正确的设计。 - Oleg Dok
@Kamyar,在数据库领域中,每年处理700万行数据是微不足道的。 - HLGEM
2
来到我的世界。每天数据库中有6亿个事件。;) 在一台小型计算机的内存中可以容纳7百万个事件。 - TomTom
@TomTom 我以为我的服务器负载很高 8-) 在 top 命令中,每10分钟有1.5M的访问量。所以现在我意识到它是中等或较低的负载 8-) - Oleg Dok
@TomTom,你的缓存通道是建立在存储架上的吗?如果是的话 - 就像我们一样 - 建立在4个节点的Hitachi VSP和Hitachi AMS2300(备份的中间层),USPVm,NSC55之上。 - Oleg Dok
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接