表結構優化:
1、根據自己的業務選擇合適的引擎
2、表設計時儘量符合第三範式
- 第一範式:表的列的具有原子性,不可再分解,即列的信息,不能分解, 只有數據庫是關係型數據庫就自動的滿足。
- 第二範式:表中的記錄是唯一的, 就滿足第二範式, 通常我們設計一個主鍵來實現
- 第三範式:表中不要有冗餘數據, 即表的信息,如果能夠被推導出來,就不應該單獨的設計一個字段來存放.
為什麼說盡量符合? 因為有些系統為了提高運行效率,就必須降低範式標準,適當保留冗餘數據。
3、表的字段儘可能使用NOT NULL
4、如果知道字符串固定長度,那麼就用char型,不要用varchar型
5、主從分離,讀從庫,寫主庫
6、當表的字段過多時,進行垂直分割;如果數據過多時,進行水平分割
sql優化:
1、不使用Select *,只查詢需要的字段,查詢所有佔用內存
2、多表連接時,儘量小表驅動大表,即小表 join 大表
3、插入多條數據時,儘量組合成一天sql批量插入
4、使用存儲過程
5、使用枚舉或整數代替字符串類型
6、開啟慢查詢,對慢sql使用explain或desc進行性能分析,並優化sql
索引優化:
- 索引並不是越多越好,要根據查詢有針對性的創建,考慮在WHERE和ORDER BY命令上涉及的列建立索引,可根據EXPLAIN來查看是否用了索引還是全表掃描
- 應儘量避免在WHERE子句中對字段進行NULL值判斷,否則將導致引擎放棄使用索引而進行全表掃描
- 值分佈很稀少的字段不適合建索引,例如"性別"這種只有兩三個值的字段
- 字符字段只建前綴索引
- 字符字段最好不要做主鍵
- 不用外鍵,由程序保證約束
- 儘量不用UNIQUE,由程序保證約束
- 使用多列索引時主意順序和查詢條件保持一致,同時刪除不必要的單列索引(最左匹配原則)
閱讀更多 JAVA高級開發 的文章