簡體   English   中英

在MySQL中使用普通的主鍵自動遞增或復合鍵

[英]using normal primary key auto-increment or composite key in mysql

適用於mysqlinoDB引擎以及最常用於讀取的表(創建和編輯與讀取查詢比較不多)

表是用於博客平台的(用戶可以自己創建博客),這是表模式的兩個選擇:

例如表格帖子:

1:posts(id,blog_id,title,content)=> id是唯一的主鍵自動增量

2:posts(id,blog_id,title,content)=> 復合主鍵是(id,blog_id),在創建查詢之前我使用觸發器來增加id列

在我的大多數查詢中,有兩種類型的位置:

1:用於檢索單個帖子:

解決方案一where id=5

解決方案二where id=2 and blog_id=3

2:用於檢索單個博客的多個帖子

where blog_id=3解決方案一的where blog_id=3

where blog_id=3解決方案二的where blog_id=3

問題:哪一個性能更好?

ps。 如果我的問題不清楚,請告訴我更多。

簡而言之,就性能而言,這無關緊要。 使用最常用的DBMS和在大多數情況下,兩者之間不會有太大區別。

但是,要考慮的最重要的事情是一個簡單的問題:兼容性和易用性。 大多數ORM系統和框架已調整為可以與一欄一起使用PK。 因此,如果您選擇復合鍵,則總是需要進行一些調整。 其次,如果您要在Web應用程序中使用REST方法,則使用單數ID也會使您的生活更輕松。

如果使用PK的“ id,blog_id”:則索引中的前列是“ id”。

如果您的查詢是“ where blog_id = 3”-這將不使用index,並且會很慢,因為blog_id不在最前面。

由於ID是表中的唯一值-只需將其作為PK。 否則會誤導他人,可能會認為ID 不是唯一的。

如果您的查詢經常使用“ blog_id”作為條件,則在該列上有一個輔助索引。

在我看來,自動遞增“ id”列比使數據庫觸發更好。 它的活動部件更少,編寫的代碼更少。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM