mysql優化

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的原理,也是在這個基礎上建立的。利用樹或哈希表這樣的數據結構來存儲數據,減少搜索時間。

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