我在 SQL Server 2012 中有一个相当大的设置表,现在有超过 100 列。顾名思义,此表跟踪我们网站内的各种设置值。它曾经有不到 50 列,但现在它的大小增加了一倍。
我将设置值存储到数据库中的原因是用户需要能够通过 UI 更改这些设置。
我真的应该担心这张桌子会随着时间的推移变得越来越大吗?或者我将不得不找到一些其他方法来存储设置数据,例如保存到文件中,也许?
我在 SQL Server 2012 中有一个相当大的设置表,现在有超过 100 列。顾名思义,此表跟踪我们网站内的各种设置值。它曾经有不到 50 列,但现在它的大小增加了一倍。
我将设置值存储到数据库中的原因是用户需要能够通过 UI 更改这些设置。
我真的应该担心这张桌子会随着时间的推移变得越来越大吗?或者我将不得不找到一些其他方法来存储设置数据,例如保存到文件中,也许?
我们使用 JSON 来存储用户设置。该表仅获得两列 - 用户 ID 和设置字符串。这个字符串很长,但没关系。您还可以使用 XML 来存储这些数据。
这是通过手指修改数据的更糟糕的解决方案,但更快地从您的数据库中获取并由客户端或 ASP.NET 服务器处理。
首先,您不需要将设置存储在数据库中以便用户在运行时更新它们。您可以简单地将它们存储在一个设置文件中,只要用户进行更改,该文件就会更新。这是一个 xml 配置文件,运行良好。
但是,如果应用程序是基于网络的,并且您希望设置跟随用户从一台机器到另一台机器,那么将它放在数据库中更有意义。
其次,是的...... 100 列是巨大的。您可以考虑将每个设置存储在单独的行中,而不是将每个设置存储在单独的列中,然后使用通用的行格式,即 ID、SettingName、SettingValue,(也许)DefaultValue。然后你的桌子可以随心所欲地变大。
我在想象您担心大型桌子上的性能?
一个问题是这张表有多少行?100 列 10000 行并不是真正的问题。超过 1000 万行的 100 列是一个略有不同的球赛。不是更糟,不是更好,只是不同。
同样的考虑适用于小型和大型表:1.您是否正确索引
2.您的 IO 是否良好 3.您的空间是否良好 4.您是否有效地查询
对此没有正确的答案,这取决于您为什么拥有大量列数以及它是否会影响您的整体性能。我们运行了超过 150 列的 1000 个表并且没有问题,即使它们之间有数百万行,我不能抱怨性能。这是相对去规范化的数据,所以有很多文本。