以我的经验,SQL Server 是一个很好的选择,你绝对可以期待 SQL Server 比 MS-Access 更好的性能,通常有更多的优化方法可供你使用。
正如您所说,我可能会继续将这些东西放入 SQL Server Express 中,希望安装在您可以使用的最好的机器上(尽管您确实提到了只有 2GB 的 RAM)。使用一个表,只要它只代表一件事(我认为飞行员的飞行日志和软件错误日志不会在同一个“日志”表中,作为一个荒谬的人为示例)。检查你的表现。如果这是一个问题,请继续使用适用于您的 SQL Server 版本的任意数量的优化技术。
以下是我最初可能会这样做的方式:
如果您在日志表上使用 PK,则使用非聚集主键创建表——我通常使用标识列来为我提供有保证的事件顺序(与重复的日期时间不同)并显示可能的日志插入失败(缺少标识)。在主日期时间列上设置一个聚集索引(您提到您已经按月拆分成单独的表,所以我假设您也会以这种方式查询)。如果您有一些经常在此表上运行的查询,请务必查看它们,但不要期望通过简单地这样做来加快速度。您很可能希望查看索引表基于这些查询中的 where 子句。在这里,您将向 SQL Server 提供有效运行这些查询所需的信息。
如果您无法通过优化查询、索引、使用尽可能小的数据类型(尤其是在索引列上)和在体面的硬件上运行来获得所需的性能,那么可能是时候尝试分区视图(这需要某种形式的持续维护)或分区表。不幸的是,SQL Server Express可能会限制您对分区的功能,您必须决定是否需要迁移到功能更丰富的 SQL Server 版本。您始终可以使用 Enterprise 评估版或 Developer Edition 测试分区。
更新:
在大多数情况下,我只需要过滤事件类型并计算数量。
由于过去的日志不会改变(有点像过去的销售数据),因此存储过去的汇总数字是这种情况下常用的策略。您可以创建一个表,该表仅存储您每个月的计数,并每月(或每周、每天等)插入一次新的计数,其中包含某种预定的作业。使用 datetime 列上的聚集索引,SQL Server 可以更轻松地从实时表中聚合当前月份的数字,并将它们添加到存储的聚合中,以显示总计数的当前值等。