思路:
1、服務器硬件優化,比如機械硬盤換成固態硬盤,更換CPU,增加運行內存
2、mysql服務器優化,window服務器換成linux服務器,不過一般企業級標配都是linux
3、sql本身優化,利用關聯查詢,連接等,避免子查詢嵌套
4、反范式設計優化
5、索引優化
其中4、反范式設計優化,允許存在適當冗余,通俗說使用表空間換取查詢時間
數據庫設計三大范式:
一、第一大范式
1、數據庫表中的所有字段都只具備單一屬性
2、單一屬性的列是由基本數據類型構成
3、設計出來的表都是二維表
二、第二大范式
1、要求表中只有一個業務主鍵,符合第二范式的表不能存在非主鍵列只對部分主鍵的依賴關系,一般處理事加中間表
三、第三大范式
1、指每一個非主鍵屬性既不部分依賴於也不傳遞依賴於業務主鍵,在第二大范式的基礎上解決了非主鍵對主鍵的傳遞依賴
優點:減少字段冗余,提高新增、修改、刪除效率
缺點:會對查詢不友好,增加查詢表的數量
阿里JAVA編程規范中也提到,字段允許適當冗余,以提高查詢性能,但必須考慮數據一致,冗余字段應遵循:
1、不是頻繁修改的字段
2、不是varcahr超長的字段,更不能是text字段
3、不是唯一索引的字段
舉例:商品類目名稱使用頻率高,字段長度短,名稱基本不變,可在相關聯的表中冗余存儲類目名稱字段,避免關聯查詢