关于mysql优化之个人见解
? ?從事PHP也有3年的時間了,期間接觸了Mysql,大學時候學的是SQL SERVER,相對而言,雖然少了SQL SERVER 的那種視圖界面操作,但是我更喜歡cmd命令行這種黑屏操作,mysql以開源免費輕量著稱,操作方便,用起來更是得心順手,好了,廢話不多說了,我們來聊聊Mysql的優化吧。
? ?說起MySQL優化,很多人會首先想到查詢優化,我不否認這種想法,但是我想糾正下這種觀點,首先MySQL優化指的不僅僅是查詢優化,比如MySQL的引擎選擇,分庫分表,以及索引多少的選擇和使用,還有更新等都是優化的一部分,我曾經聽一位MySQL的講師說過一句話:“不去優化就是最大的優化”,當時第一次聽這句話的時候頗有點武俠“無招勝有招”的感覺,后來我慢慢理解了,這句話是告訴我們,你不去使用數據庫取數據就不用再去做什么優化了,那么不去數據庫,去哪取數據呢,這就需要用到諸如Memcached,redis,Solr 等緩存庫了。
? ? 說起索引優化,并不是索引越多越好,相反,索引越多就會有弊端,大家都知道,加索引就相當于是書簽,能提升MySQL的讀入速度,但是很多人卻不知道,你加了索引在5個以上對于千萬級數據量來說是以犧牲寫入速度來換取的,所以,換句話說,索引只需要建立適合的,不是越多越好。
? ? 再來簡單說說查詢優化,首先查詢一種說法有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等
? ? 以上就是我個人的一些簡單的見解,當然有很多說的不是很到位,如果有什么不對的地方,歡迎大家指正!
? ? ?
轉載于:https://blog.51cto.com/lamp68/1847185
總結
以上是生活随笔為你收集整理的关于mysql优化之个人见解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NHibernate初探-SQLDial
- 下一篇: Valve Index VR 头显销量下