主鍵設計的原則:
1. 必定要顯式定義主鍵
2. 採用與業務無關的單獨列
3. 採用自增列
4. 數據類型採用int,並儘量小,能用tinyint就不用int,能用int就不用bigint
5. 將主鍵放在表的第一列性能
這樣設計的緣由:
1. 在innodb引擎中只能有一個彙集索引,咱們知道,彙集索引的葉子節點上直接存有行數據,因此彙集索引列儘可能不要更改,而innodb表在有主鍵時會自動將主鍵設爲彙集索引,若是不顯式定義主鍵,會選第一個沒有null值的惟一索引做爲彙集索引,惟一索引涉及到的列內容不免被修改引起存儲碎片且可能不是遞增關係,存取效率低,因此最好顯式定義主鍵且採用與業務無關的列以免修改;若是這個條件也不符合,就會自動添加一個不可見不可引用的6byte大小的rowid做爲彙集索引spa
2. 需採用自增列來使數據順序插入,新增數據順序插入到當前索引的後面,符合葉子節點的分裂順序,性能較高;若不用自增列,數據的插入近似於隨機,插入時須要插入到如今索引頁的某個中間位置,須要移動數據,形成大量的數據碎片,索引結構鬆散,性能不好
3. 在主鍵插入時,會判斷是否有重複值,因此儘可能採用較小的數據類型,以減少比對長度提升性能,且能夠減少存儲需求,磁盤佔用小,進而減小磁盤IO和內存佔用;並且主鍵存儲佔用小,普通索引的佔用也相應較小,減小佔用,減小IO,且存儲索引的頁中能包含較多的數據,減小頁的分裂,提升效率
4.將主鍵放在表的第一列好像是習慣,緣由我也不知道,試了下是能夠放在其餘列的......設計