2015-12-22 149 views
0

MySQL的inoDB引擎和表,大多數使用用於讀取(不多創建和編輯與讀取查詢比較)使用MySQL的正常主鍵自動遞增或複合鍵

表是對於博客平臺(用戶可以創建自己博客),這裏是我的兩個選項表模式:

例如,對於表的帖子:

1:帖(ID,blog_id,標題,內容)=>id是只有主鍵自動 增量

2:帖(ID,blog_id,標題,內容)=>複合主鍵是 (ID,blog_id),我使用觸發器之前創建查詢遞增ID 列

,並在我的大多數的查詢在兩個類型:其中:

1 :用於檢索單個職位:

where id=5爲解決一個

where id=2 and blog_id=3的解決方法二

2:檢索解決一個單一的博客

where blog_id=3多職位

where blog_id=3的解決方法二

問題:其中之一是獲得更好的性能?

ps。如果我的問題不清楚,那麼我會解釋更多。

+0

我猜想這取決於你選擇的樣子。 –

+0

@JonStirling我編輯問題 – mohsenJsh

回答

1

簡言之,性能方面並不重要。使用最常用的DBMS,在大多數情況下,你不會看到兩者之間的差異。

但是,要考慮的最重要的事情很簡單:兼容性和易用性。大多數ORM系統和框架被調整爲與一列即PK一起工作。所以如果你選擇一個組合鍵,它總是需要一些調整。其次,如果您要在Web應用程序中使用REST方法,那麼使用單數ID也會讓您的生活更輕鬆。

+0

REST方法,好點謝謝 – mohsenJsh

1

如果使用「id,blog_id」的PK:那麼索引中的前導列是「id」。

如果您的查詢是「where blog_id = 3」 - 此不會使用使用索引,並且速度會很慢,因爲blog_id不是領先的列。

由於ID是表中的唯一值 - 只是將其作爲PK。否則其誤導性,有人可能認爲ID是而不是的唯一。

如果您的查詢經常使用「blog_id」作爲條件,那麼在該列上有一個二級索引。

自動遞增「id」列比在我的視圖中使用數據庫觸發器要好。它的運動部件更少,編寫的代碼量更少。