簡體   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