本書講述到定稿前的MySQL5.5版,因此下面內容的適用範圍止步於MySQL5.5。本文僅僅強調書中講述的重中之重, 以便快速查閱,詳細的內容還請認真閱讀書本和MySQL的官方文檔。java
本章討論了MySQL的分區表,視圖,外鍵,存儲過程,綁定變量,插件,字符集,全文索引,XA事務,查詢緩存。node
適用於大數據量的過濾場景,或者數據分爲歷史數據和熱點數據,對於單條記錄的查詢並無多少優點。算法
經過句柄對象轉化成對存儲引擎的接口調用,對於SQL層是徹底封裝底層實現的黑盒子。 CURD操做都會先代開並鎖住全部的底層表,而後在解鎖不須要的表。因此並非在處理過程當中都鎖住表。sql
<!-- more -->數據庫
簡化應用程序的SQL語句編寫(諸如表聯結),或者使用視圖實現基於列的權限控制,重構schema等。緩存
爲確保系統完整性的額外特性,會帶來較高地效率代價,外鍵致使的死鎖問題難以排查。若是要設計高性能系統, 建議經過應用程序而不是外鍵來維護數據的完整性。安全
存儲過程和存儲函數均可以接收參數而後返回值,觸發器和事件卻不行。 能夠節省不少網絡開銷,也能夠操縱一些沒有權限的表,可是bug較多,使用時要慎重考慮。服務器
對於大量重複類型的查詢語句,性能會有很大的提高。通常來講,利大於弊,使用還能保證必定的安全性。網絡
public boolean insert(User user){ boolean flag=true; Connection conn=null; PreparedStatement ps=null; String sql="update user set pwd=? where name=?"; conn=DBConnUtil.getConn(); try { ps=conn.prepareStatement(sql); ps.setString(1, user.getPwd()); ps.setString(2, user.getName()); int i= ps.executeUpdate(); if(i==0){ flag=false; } } catch (SQLException e) { e.printStackTrace(); }finally{ DBConnUtil.closeAll(null, ps, conn); } return flag; }
用C或C++編寫插件來擴展MySQL的功能,極客所爲。函數
數據庫,表間的字符集最好統一,可是是否使用UTF-8看狀況而定。
最好使用Lucene、Sphinx來解決全文索引問題。
除非真正明白XA事務,不然不要輕易更改默認配置。
真正須要查詢緩存時才使用,不然不要使用。使用時不要設置太大的緩存內存。 若是但願有更高的緩存效率,最好在應用程序提供緩存。
以上的高級特性都不是萬能藥,使用時要充分用與不用的測量,還包括考慮當前數據庫的版本。