小编Uğu*_*han的帖子

当我可以使用其他人作为关键字段时,为什么要创建 ID 列?

可能的重复:
为什么使用 int 作为查找表的主键?

到目前为止,我习惯于为每个表创建一个 ID 列,它的实用性使我不必考虑有关主键理论的决策。

我大学的教授建议全班从一个或多个字段制作主键,这些字段构成关于每一列的一个唯一信息。是的,我想养成使用自然键而不是代理键的习惯。维基百科上列出了代理键的优缺点,我严格推荐这篇文章

我见过人们对所有内容都使用整数 ID 字段,但没有人评判这种方法,因为

  • 它“看起来”高效
  • 使用了一个数字字段,它看起来更酷,因为它在内存中每行的大小

我开始认为额外的 ID 字段只是创建冗余数据而没有实际好处。那么当我可以使用其他列作为关键字段时,为什么还要创建 ID 列呢?

  • 如果您的 ID 字段是 32 位,则它已经相当于 4 个 ASCII 字符。
  • 如果您的 Id 字段是64 位整数,则它是8 个字符的字符串,因此它实际上并没有节省那么多内存(这里暗示的是用于比较的内存。额外的 id 列已经添加到使用的内存中(HDD 和 RAM) ) )
  • 额外的 ID 字段会使您的索引成本加倍,因为您还将索引一个可以用作主键的唯一字段。
  • 如果您需要可以用作关键字段的数据,则进行额外的联接,例如,如果您在一篇博客文章中存储了唯一的用户 ID,以显示作者姓名,则进行联接查询,如果您的密钥字段是作者的名字,你不需要加入,因为你将相关数据存储在博客帖子表中。具有有意义数据的外键字段减少了子查询或连接的需要

在此处输入图片说明

  • 创建一个额外的 id 字段“添加”到内存负载,它不是唯一字符串字段的替换,您不是用整数替换 char-varchar 字段,而是添加一个额外的列并创建额外的数据流。所以任何数据存储的比较都应该在“string”和“int+string”之间进行。添加整数 id 字段不节省空间。

另一方面

  • 分配从用户输入中获取价值的主键数据可能会出现问题,因为人们可能会输入错误的社会安全号码,并且由于独特的政策,想要注册的实际人员将无法注册。这可以通过在原始号码上添加一个或多个额外数字来规避。

额外资源:

  1. 自然vc代理键的比较

我从阅读文章中得出的结论是,我应该尽可能使用自然键,而不是每次都跳过考虑自然键并使用代理键,好像这是一个标准。

mysql sql-server primary-key uniqueidentifier surrogate-key

54
推荐指数
4
解决办法
4万
查看次数

使用查询检测 SQL Server 利用率

我当前的项目将不断向 sql 服务器发送查询,它可能会使用 100% 的内存或 CPU。

  • 如何在存储过程中检查服务器是否接近充分利用,以便我可以决定是否执行查询或将某些设置保存在表中,以便以下查询可以知道工作负载很高并决定要做什么

  • 如果没有,如何防止 SQL Server 达到充分利用?

有关案例的更多信息:现在我知道我们当前的测试服务器每秒可以处理 40-50 个查询(一个特定的存储过程)。现在我们将决定每秒向服务器发送多少查询。如果我们设置的数量比预期的还要高 1,从长远来看,查询最终会填满虚拟内存,客户端将不得不定期重新启动他们的 sql server 实例。

预期结果(赏金猎人):

@memory_usage float, @cpu_usage float; /* in percentage */
Run Code Online (Sandbox Code Playgroud)

欢迎任何想法。谢谢。

rdbms sql-server-2008 sql-server

7
推荐指数
3
解决办法
3万
查看次数

RDBMS 可以连接到远程服务器,执行选择查询并将它们复制到本地表中,仅使用 SQL 命令吗?

对不起,这听起来很愚蠢,但我一直想知道在虚拟化时代之前多个数据库是如何自动化的。DB Adminsitrator 可以创建一个存储过程来从远程 RDBMS 获取数据并将它们选择到本地表中吗?

oracle sql-server select remote

0
推荐指数
1
解决办法
775
查看次数

数据库服务器的可扩展性是否不如 Web 服务器?

是不是可以通过虚拟化来扩展数据库服务器,就像永远一样?我喜欢将大部分工作负载保留在数据库服务器上,因为它优化了查询,并且该架构减少了 db 服务器和 web 服务器之间的带宽使用。有什么理由我不应该在可扩展性方面这样做吗?

architecture scalability virtualisation

-3
推荐指数
1
解决办法
91
查看次数