繁体   English   中英

MySQL,外键与索引 ID 列不为空

[英]MySQL, Foreign Key vs Indexed ID column with NOT NULL

假设您有用户表和帖子表。

用户

id
name
email

帖子

id
contents
user_id

如果我在 Posts 表中为“user_id”添加索引,并将其设置为 NOT NULL,我可以期待与外键相同的效果吗?

我知道我可以将 user_id 设置为任何数字,而 foreign_key 会强制你设置有效的 id。 假设 user_id 是有效的。 当我们设置foreign_key时有什么性能优势吗?

外键的主要好处是它们强制数据一致性,这意味着它们保持数据库清洁,换句话说,键是应用了完整性规则以防止数据损坏的索引。

索引是一种建立在表列上的数据结构,用于根据索引列的值加快搜索索引记录的速度。 换句话说,您获得搜索速度以换取插入/删除速度和存储。

当我们设置foreign_key时有什么性能优势吗?

在性能方面,您不会面临任何改进。

由于数据检查规则,外键会影响 INSERT、UPDATE 和 DELETE 语句,但请记住,您的数据将是一致的。

在 MySQL 中,定义外键约束会自动创建索引,除非它可以使用已经存在的索引。 也就是说,如果您创建索引并随后在同一列上添加外键,MySQL 不会仅为外键创建额外的索引。

如果您运行需要该索引的查询,则无论您是自己创建索引还是创建索引作为添加外键的副作用都没有关系。 无论哪种方式,索引都可以帮助查询。 性能优势是相同的。

如果您运行不需要该索引的查询,那么无论哪种方式都有索引都没有好处。

您没有描述任何特定的 SQL 查询,因此我们无法猜测是否需要索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM