sql-server - 在这种情况下,为了速度而牺牲数据库设计基础知识是否正确?

标签 sql-server performance database-design

我在一家公司工作,该公司使用单表 Access 数据库作为其出站 cms,我将其迁移到基于 SQL Server 的系统。有一个数据列表(未标准化)和一个调用表。目前大约每秒更新一次。所有调用结果以及日期、时间和座席 ID 都存储在调用表中。代理有一组预定义的记录,他们每天都会调用这些记录(这包括来自各种数据列表的记录,这些记录经过排序以在整个记录集中均匀分布)。请注意,数据列表记录每天调用一次。

为了确保速度,该系统的实时更新存储在数据列表中的调用表字段的副本中。然后,这些信息会在一天结束时以批处理方式复制到调用表中。

其原因显然不是将新记录添加到实时调用表中的速度,而是当用户应用程序关闭/打开并再次加载用户的数据集时,我需要检查哪些记录尚未添加今天被调用 - 我需要在服务器上运行一个存储过程,从调用表中选择最后一次调用,并检查其调用日期是否与今天的日期不匹配。我相信比检查数据列表中的字段是否为 NULL 更昂贵的查询。

通过此设置,我只在每天结束时运行昂贵的查询。

这个设计有很多陷阱,主要的限制是我的经验不足。这是我的第一个 SQL Server 系统。这是非常关键的,我必须确保它能够工作,并且在实时故障期间我可以轻松地将数据转储回访问数据库。现在它已经工作了 11 个月(没有任何实时故障,停机时间比旧系统少)。

我已经为其他事物创建了相当好的规范化数据库(用户数量少得多),但我对于是否为调用数据库实现这一点犹豫不决。

具体来说,我想知道您对在我当前的设置中是否需要重复数据列表中的调用字段或者我是否应该能够使用调用表的想法。请尝试从我的角度来回答这个问题。我知道你们 DBA 可能会感到畏缩!

最佳答案

重新设计已经工作的数据库可能会成为这里的主要缺陷。如果从头开始,不如尝试优化当前正在运行的内容。考虑索引、引用完整性、键分配方法、连接的正确使用等。

事实上,看看这里:

Database development mistakes made by application developers

这概述了一些非常有用的指导。

关于sql-server - 在这种情况下,为了速度而牺牲数据库设计基础知识是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1592516/

相关文章:

asp.net - Azure 和独立 SQL Server 上的 SqlMembership

java - 从字符串中删除重复的 URI 参数的最佳方法是什么?

c# - EF4 Code First 数据库生成

database-design - PostgreSQL 9 中的日历表

c# - 有哪些用于创建通用 SQL Server 查询的 .NET 方法?

sql - 列出具有最大长度和最大长度的所有 SQL 列

Java String.intern() 使用 HashTable 而不是 ConcurrentHashMap

MySQL 条件文本聚合

c# - 我是否需要安装 microsoft sql server 或者它默认随 visual studio community 2017 一起提供?

java - 在 J2EE Web 应用程序中转换 XSLT 的最佳方法