(續) MySQL的Primary Key最好還是用Auto-increment

tldr

上一篇文章有誤導,在參考官方文件、網路上分享之後,
Primary Key 最好還是保持 int auto-increment 的型式。
原本兩個欄位串在一起存成 string 當成 primary key 的方式還是用 index 取代。

分享得到的回饋

上一篇文章之後,我把這個很酷的發現跟同事分享,
同事表示資料量小的時候是OK,資料量大的時候不太好。

我首先是懷疑了這個說法,不過還是得去查資料佐證…

Primary key的正確使用方式

參考自 Genchi Lu淺談 InnoDB 的 Cluster Index 和 Secondary Index
以及這份官方文件

整理成以下幾點:

  1. PK 相近的資料會被儲存在一起
  2. 用 PK 來讀取資料非常快速
  3. 每個 index 中都包含對應的 PK,MySQL 在 index 查詢到符合的資料時,會透過 PK 去讀取該 row 的資料
  4. 如果 PK 很長,index 會跟著變大

所以說,
比如像我上一篇把另外兩張表的 pk 串成一個新的欄位,like this

1
2
{$articleId}-{$userId}
1223344-9527

可以想像到新進來的資料絕對是亂序的,
而亂序就會造成儲存的效能問題…

那麼讀取效能、Table size呢?

恩…有空再測試吧