Mysql 優化
- 服務器硬件
- Mysql服務器優化
- SQL語句優化
- 範式化設計優化
- 物理設計優化
- 索引優化
服務器硬件
這是最簡單的一種方式,1升級硬盤一般數據庫服務器的瓶頸都在IO,如果是機械硬盤的話,可以換個固態硬盤。或做磁盤陣列。2升級內存。
mysql服務器優化
這種方式是通過,合理地修改Mysql的配置去實現的。將mysql遷移到linux上。
SQL語句優化
避免關聯子查詢
select a.sname,(select classname from class b where b.classid=a.classid) as classname from student a;改成left join,具體就不寫了。
反範式化設計優化
冗餘必要字段
注意在業務表中別違反。會大大的降低系統的可維護性與數據的一致性。經常在維護一些老的項目時,吃盡了苦頭。幾個表中都有這個字段。我更改時,真不知道要改多少個地方。
物理設計優化
建表時選擇合適的數據類型
當一個列可以選擇多種數據類型時
1優先考慮數據類型
2其次是日期,時間類型
3最後是字符類型
4對於相同級別的數據類型,應該優先選擇佔用空間小的數據類型
索引優化
- 注意索引順序與條件的關係,有個最佳左前綴原則。即:where的條件與索引的順序要一致,不然,將失效。如:索引順序爲A,B,C列。where a=1 and b=2 and c=3.完美走索引。如果是where c=3 and b=2 and a=1 這樣索引是不走索引的。如果是where a=1 and c=3 and b=2 那麼只走了a的索引。b,c都不起作用。這就是最佳左前綴原則。
- 當條件中有範圍查詢的時候,索引必須要建在最後。如:where a>1 and a<7 and b=1 and c=2 索引順序應該要是:b,c,a。
- 可以使用explain來查看查詢計劃。其中有一列:key_len。如果現在索引:a(varchar(10))b(varchar(10))那麼key_len=103+103=60。如果查詢計劃出來的key_len是60則完成走了索引。如果小於60則部分索引失效。備註:類型如果是允許爲空的,就要在原大小上加1。varchar 2個字節允許爲空所以是3。
總結
在項目的優化中,利用好索引,可以讓你們項目性能提升百倍。很多nosql的原理,也是在這個基礎上建立的。利用樹或哈希表這樣的數據結構來存儲數據,減少搜索時間。