Java開發者MySQL使用手冊(持續更新)

這個是對Java開發人員的MySQL使用手冊.亂序持續更新中,建議不要使用5.6以下的版本,至少5.7以上.

  1. MySQL的數據類型。MySQL支持多種類型,大致可以分爲三類:數值、日期/時間和字符串(字符)類型。這個一定要熟悉,因爲關係到你設計的表是否合理.可以參考MySQL 數據類型.
  2. 字符集不要設置爲utf8 ,改爲utf8mb4.COLLATE使用utf8mb4_general_ci
  3. 金額字段使用 int 或者 bigint 類型。如果需要存儲到分的維度,需要 *100 進行放大.或者使用 decimal 類型,避免精度丟失。如果使用 Java 語言時,需要使用 BigDecimal 進行對應. FLOAT 和 DOUBLE 都是不精確的,如果要實現精確浮點運算,不能選擇FLOAT 和 DOUBLE。
  4. 如果主鍵索引是業務索引字段,並且長度達到十幾,比如身份證號,建議使用自增主鍵索引,然後給你的業務字段創建普通索引
  5. 查詢所有有自增字段的表select * from information_schema.`COLUMNS` where EXTRA='auto_increment' and TABLE_SCHEMA='payment'
  6. like 的方式進行查詢,在 like “value%” 可以使用索引,但是對於 like “%value%” 這樣的方式,執行全表查詢。
  7. 使用了複合索引時,遵守“最左前綴”原則,即在查詢條件中使用了複合索引的第一個字段,索引纔會被使用。因此,在複合索引中索引列的順序至關重要。
  8. DATETIME 和 TIMESTAMP 都可以存儲相同類型的數據,而 TIMESTAMP 只使用 DATETIME 一半的存儲空間。通常情況下,建議優先考慮 TIMESTAMP,因爲它的空間利用率更高。用法@Temporal(TemporalType.TIMESTAMP)
  9. @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "trade_time")
    // "交易時間")
    private Date tradeTime;
  10. MySQL數據類型儘量不要使用枚舉類型。如果需要增加新的枚舉類型,需要全表更新,對於大數據量的更新場景,會造成鎖表

  11. 定長的字符串,可以選擇 CHAR。舉個例子,身份證是定長類型,那麼選擇 CHAR 是非常合適的。

  12. 變長的字符串,可以選擇 VARCHAR, 因爲 VARCHAR 更加節省空間。

  13. 存儲大文本的場景,可以考慮使用 BLOB 和 TEXT。

  14. 整數類型可以選擇 UNSIGNED 屬性,表示不允許負數,這樣可以使得正數的上限提高一倍。

  15. 儘量避免使用 != 或 not in或 <> 等否定操作符。

  16. 儘量避免使用 or 來連接條件。

  17. 查詢中的某個列有範圍查詢,則其右邊所有列都無法使用索引優化查找。

  18. 複合索引中只要有一列含有 NULL值,那麼這一列對於此複合索引就是無效的。

  19. 不要在列上使用函數和進行運算.

  20. 對於同時存在 WHERE 和 ORDER BY 的 SQL 語句,可以建立一個複合索引進行性能優化。

 


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章