1. 優化方向
- SQL以及索引的優化。首先根據需求寫出良好的SQL,然後根據SQL在表中建立有效的索引。但是索引不能過多,否則會影響查詢效率。
- 合理的數據庫設計。根據數據庫三範式來進行表的結果設計,設計時應該考慮如何更有效的進行查詢.
- 系統配置的優化。例如:mysql數據庫的my.cnf文件.
補充
1.1 字段類型選擇
- 少使用INT,多使用TINYINT,SMALLINT,如果非負加上UNSIGNED
- VARCHAR的長度只分配真正需要的空間
- 避免使用NULL,因爲很難查詢優化且佔用額外索引空間
1.2 數據庫三範式
第一範式:數據表中每個字段都必須是不可拆分的最小單元,也就是確保每一列的原子性;
第二範式:滿足一範式後,表中每一列必須有唯一性,都必須依賴於主鍵;
第三範式:滿足二範式後,表中的每一列只與主鍵直接相關而不是間接相關(外鍵也是直接相關),字段沒有冗餘。
2. 優化方案
(1) 代碼優化。有一些性能問題完全是由於代碼寫的不合理,有時候直接修改下就能解決。比如:for循環過多,做了無謂的條件判斷,相同邏輯重複多次。
(2) 定位慢SQL,並優化。由自帶的慢查詢日誌或者開源的慢查詢系統定位到具體的出問題的SQL,然後使用explain,prifile等進行逐步調優.
(3) 合理使用索引。由於索引是以空間換時間,會影響增,刪,改的效率.頻繁寫的表不宜建索引。選擇在where,group by,order by,on從句中出現的列作爲索引,對於離散度不大的列沒必要創建索引。
(4) 緩存
(5) 分表
(6) 讀寫分離