剛剛看了一下2014年中國數據庫技術大會(DTCC)PPT,網易杭州研究院的一位同窗介紹了一下數據庫的優化與調優。 程序員
網易的Mysql優化作的很好,並且還寫了本書和你們分享這些經驗《深刻淺出MySQL數據庫開發優化與管理維護》。 sql
文章裏面大多數寫的是咱們日常不多想到的硬件方面的優化,仍是很深刻的。其中提到的《面向程序員的數據庫訪問性能優化法則》引發了個人關注。一直以爲,程序員應該會寫好的SQL,就像應該寫好的代碼同樣。咱們讀過《Effective C++》等語言類的經典書籍,也能夠讀一下數據庫的優化的文章和書籍,例如:《Effective MySQL 之 SQL語句最優化》。
數據庫
《面向程序員的數據庫訪問性能優化法則》從SQL語句,應用到業務上,都給了咱們一些建議。其中最核心的應該就是,儘量減小數據量,減輕延時。例如 性能優化
寫出具體字段 select a , b ,c from xx,還不是用 select * from xx ; 架構
減小鏈接次數,使用批量提交,或者使用 select xxx where id in ( 1, 2 , 3 )來查詢少許的集合數據,而不用 for i in n{ select xxx from t where id = i ; } 性能
優化業務邏輯,使數據量減到最小;就像咱們寫for循環的時候,將時間複雜度儘可能下降。 優化
文章中講述的索引讓我不得不反思了以前創建索引的方式。之前盲目地覺得須要查詢的條件都加上索引,系統便會加快。但對於大量數據的CRUD來講,索引增長的額外開銷開始變得不容忽視。 spa
索引對於Insert性能下降56% .net
索引對於Update性能下降47% 架構設計
索引對於Delete性能下降29%
文中對一些常常使用的字段創建索引給了一些指導性建議,感受挺實用的。
另外,關於SQL的執行計劃和statement綁定變量的描述也讓我受益,不知原理,很難作到最優。
關於Mysql的書籍不少,例如:
《Effective+MySQL之SQL語句最優化》
《Mysql_Explain_語法詳細解析》
《MySQL性能調優與架構設計》
《高性能MySQL》
讀萬卷書,行萬里路,深刻原理後,MySQL才能更好的爲咱們服務。固然,無論NoSQL如何侵入數據庫體系,只要在各自的場景用好,就實現了它們的價值。