我知道我们使用主键来唯一地标识每一行,但是如果我们从代码中管理所有行呢?主键到底有什么用?
最佳答案
- 没有索引,用户从数据库中删除父行 会强制 SQL Server 查询引擎扫描子表 在外键中引用以确保数据完整性 妥协了。考虑一个包含数十万个子表 行;索引可以大大加快查找速度。
- 外键 CASCADE 选项的性能(ON DELETE CASCADE,ON UPDATE CASCADE)可以通过使用得到显着改进 索引的索引,因为引擎执行查询来搜索行 应自动删除或更新。
- 父表和子表之间 JOIN 的性能 外键列大大改进。这是一个自然的假设 相关的表可以一起查询以生成 结果集。考虑前面的 ORDERHEADER/LINEITEM 示例。它 对于不需要执行的查询来说是很自然的 仅限 LINE ITEM 的元素,也包含 ORDERHEADER 的元素(例如 订单日期,输入订单的 CSR)
- 开发和维护数据模型时,请检查您的模型的位置 可以从外键关系中受益
- 确保外键列已建立索引以防止表扫描 在数据删除、级联操作和查询 JOIN 期间。
关于mysql - 如果我们通过代码管理唯一性和自动增量,为什么要使用主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44538076/