從事PHP也有3年的時間了,期間接觸了Mysql,大學時候學的是SQL SERVER,相對而言,雖然少了SQL SERVER 的那種視圖界面操做,可是我更喜歡cmd命令行這種黑屏操做,mysql以開源免費輕量著稱,操做方便,用起來更是得心順手,好了,廢話很少說了,咱們來聊聊Mysql的優化吧。mysql
提及MySQL優化,不少人會首先想到查詢優化,我不否定這種想法,可是我想糾正下這種觀點,首先MySQL優化指的不只僅是查詢優化,好比MySQL的引擎選擇,分庫分表,以及索引多少的選擇和使用,還有更新等都是優化的一部分,我曾經聽一位MySQL的講師說過一句話:「不去優化就是最大的優化」,當時第一次聽這句話的時候很有點武俠「無招勝有招」的感受,後來我慢慢理解了,這句話是告訴咱們,你不去使用數據庫取數據就不用再去作什麼優化了,那麼不去數據庫,去哪取數據呢,這就須要用到諸如Memcached,redis,Solr 等緩存庫了。redis
提及索引優化,並非索引越多越好,相反,索引越多就會有弊端,你們都知道,加索引就至關因而書籤,能提高MySQL的讀入速度,可是不少人殊不知道,你加了索引在5個以上對於千萬級數據量來講是以犧牲寫入速度來換取的,因此,換句話說,索引只須要創建適合的,不是越多越好。sql
再來簡單說說查詢優化,首先查詢一種說法有N種SQL寫法,因此,每種寫法帶來的效率是不同的,好比在價格表中查詢最低價,就有不少查法,1是用MySQL自帶的MIN函數,2是用order by 來降序查詢第一條數據,固然還有其餘諸如此類的寫法,咱們在查詢的時候習慣性的用*來表明字段查詢,可是我以爲這樣不是很好,在查詢的時候須要什麼字段會去查什麼字段而不是偷懶的使用*來代替,並且你所取的數據中確定不是全部字段都用到吧。數據庫
還有就是在數據類型的選擇上,好比INT型,CHAR型,VARCHAR型等經常使用類型,那麼咱們選擇怎麼選擇類型呢?比較知名企業騰訊在整型的選擇上用的並不是是INT而是BigInt型,由於QQ會有特殊的靚號會存儲不釋放,因此存儲空間須要8個字節,可是對於幾萬條,幾十萬條數據的中小型企業INT型就夠用了,固然咱們要防範INT溢出,要是數據超出了,就須要分庫分表了,又好比在作用戶管理功能的時候,存儲男女,這時候建議使用ENum類型,雖然存儲的是0和1,可是讀出來確是男和女,比你轉化的效率要高吧。再來講說char和varchar ,這哥倆最本質的區別就是字節的滿與不滿,char是定多少字節就是多少字節,而varchar更靈活,會自動設置空間大小,因此在字符串選擇上更優先選擇VARCHAR類型。固然在查詢表數據的時候若是你的數據類型是固定長度,查詢速度會更快。緩存
優化不只僅是我說的這些東西,好比引擎的選擇上,MyIsam在不考慮任何比較的狀況下,讀的速度是最快的,而INNODB支持行鎖而且支持事務處理在寫入較多的狀況下速度會大幅度提高,又好比說在建表的時候就得想好存儲結構,字段類型,必要的時候加上not null等ide
以上就是我我的的一些簡單的看法,固然有不少說的不是很到位,若是有什麼不對的地方,歡迎你們指正!函數