mysql優化

#Mysql 優化mysql

  • 服務器硬件
  • Mysql服務器優化
  • SQL語句優化
  • 範式化設計優化
  • 物理設計優化
  • 索引優化

#服務器硬件linux

這是最簡單的一種方式,1升級硬盤通常數據庫服務器的瓶頸都在IO,若是是機械硬盤的話,能夠換個固態硬盤。或作磁盤陣列。2升級內存。sql

#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,具體就不寫了。nosql

#反範式化設計優化性能

冗餘必要字段 注意在業務表中別違反。會大大的下降系統的可維護性與數據的一致性。常常在維護一些老的項目時,吃盡了苦頭。幾個表中都有這個字段。我更改時,真不知道要改多少個地方。優化

#物理設計優化設計

建表時選擇合適的數據類型 當一個列能夠選擇多種數據類型時 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的原理,也是在這個基礎上創建的。利用樹或哈希表這樣的數據結構來存儲數據,減小搜索時間。

相關文章
相關標籤/搜索