mysql - 如果我们通过代码管理唯一性和自动增量,为什么要使用主键?

标签 mysql sql sql-server database rdbms

我知道我们使用主键来唯一地标识每一行,但是如果我们从代码中管理所有行呢?主键到底有什么用?

最佳答案

  • 没有索引,用户从数据库中删除父行 会强制 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/

相关文章:

sql - 帮助 PIVOT

PHP 连接 MySQL 错误

sql - 如何将 YYYYMMDDHHMMSS 转换为 2013-11-24 11 :29:07 in postgres

MySQL 字段长度错误

sql - 为什么此 SQL 不能作为存储过程运行,但作为常规查询运行良好?

sql-server - 添加新列并设置外键关系

c# - ADO.Net : Get table definition from SQL server tables

mysql - SQL 中的存储过程用于连接两个表

MySQL:将 AUTO_INCREMENT 增加一个固定值 ONCE

mysql - 如何在MySql中返回具有相同列值的行