重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
如果你沒有 MySQL 的基礎,建議可以看看以下書籍:
網站設計、成都網站建設的關注點不是能為您做些什么網站,而是怎么做網站,有沒有做好網站,給創新互聯建站一個展示的機會來證明自己,這并不會花費您太多時間,或許會給您帶來新的靈感和驚喜。面向用戶友好,注重用戶體驗,一切以用戶為中心。
《MySQL 必知必會》:主要講 SQL 的寫法
《深入淺出 MySQL》:比較全面的講解了 MySQL 的基礎知識,也涉及了一些優化。
如果已經對 MySQL 比較熟悉了,可以看下面的書籍:
《高性能 MySQL》:里面講了很多 MySQL 優化技巧。
《MySQL 技術內幕》:講解了很多 MySQL 原理,強力推薦給想深入學習 MySQL 的同學。
《MySQL 內核:InnoDB 存儲引擎》:想深入研究 MySQL 內核及原理的可以看看。
《MySQL 運維內參》:對 MySQL 源碼感興趣,可以入手。
《MySQL Internals Manual》
《MySQL 5.7 Reference Manual》
在MySQL日常運維工作中,經常會用到各種管理工具,這些工具屬于mysql自帶的管理工具,存儲在mysql目錄下的bin目錄中,例如對象查看,備份,日志分析等,熟練使用是運維開發人員的必備工作,這些工具參數很多,這里介紹常用選項,更多詳細可參考幫助文件。
在mysql工具集中,管理員使用最頻繁的就是mysql命令了,它是連接數據庫的客戶端工具,類似oracle中的sqlplus,通過它可以進入mysql控制臺界面。在大部分情況下,使用簡單,命令語法如下:
常用選項:選項一般有兩種表達方式,一種是"-"+選項單詞縮寫和選項值;另一種是“--”+選項的完整單詞“=”選項實際值。例如我們連接數據庫的兩種命令如下:
myisampack是一個表壓縮工具,它對MyISAM存儲引擎表能進行高度壓縮,可以很大的節省磁盤空間,但是壓縮后的表只能讀,不能寫,不能進行DML操作,所以它的使用場景一般是歸檔 歷史 數據。命令如下:
當對一個壓縮表進行增加操作時會報一個錯誤:ERROR 1036 Table is read only,但時對查詢和統計時可以正常操作的。
mysqladmin是一個對數據庫進行管理操作的客戶端工具,可用來檢查服務器是否可用、顯示數據庫版本號和狀態,還可以直接新增一個數據庫,也可對數據庫進行關閉,功能和mysql類似,它的參數和mysql差異不大,命令如下:
它還可以修改root密碼,命令如下
MySQL自帶的mysqlbinlog工具的作用是解析二進制binlog的日志內容,把二進制數據還原成mysql可以執行的SQL語句。我有篇文章專門介紹該工具的使用,請具體參考:
傳送門:mysql運維管理(七):使用Mysqlbinlog工具恢復增量數據
mysqlcheck工具可以用來檢查和修復MyISAM存儲引擎的表,還能做優化的工作,例如check、repair、analyze、optimize等等功能。具體命令如下:
注意,如果是innodb引擎的表,不能用上述優化工具。
mysqldump工具用來邏輯備份數據庫,或者數據遷移。該工具是最常用的備份工具。
我有篇文章專門介紹該工具的使用,請具體參考:
傳送門:mysql運維管理(五):掌握MySQLdump邏輯備份工具使用
它是數據導入工具,專門用來處理mysqldump 加-T選項后導出的文本文件,基本用法很簡單,命令如下:
客戶端對象查找工具,用來查找數據庫,數據庫的表,表中列或者索引,具體使用命令如下:
不加任何選項,默認顯示所有數據庫。
常用參數:
--count ,用來顯示數據庫和表的統計信息,不指定數據庫的話,顯示所有庫信息
-k或者--keys,用來顯示指定表中所有索引,例如查看employees庫中employees表的索引信息,
在使用mysql使用過程中,會經常出現錯誤,錯誤信息都會帶有一個編碼,具體編碼代表什么意思,就需要perror來查看。用法很簡單:
舉個例子,我們故意寫錯一個查詢語句,例如:
現在有一個編碼1054,我們可以用perror查看下
結果跟用工具顯示的內容差不多,當然第三方工具也會顯示錯誤信息。
本章做了一個常用工具的使用匯總,并舉例說明了基本用法,熟練使用是每個運維人員必修內容,當然還有很多參數沒有一一列舉,可以參考相關幫助文檔。
個人能力有限,如有錯誤請指出,共同學習。
二叉樹
B樹
B+樹
特點:
聚簇索引
二級索引
key數據存儲量估算:
若每個頁可以存1000個key,而且樹的高度是4,那么
前提條件如下:
插入步驟
步驟一
因為索引中還沒有數據,所以此時的B+樹只有一個空的根結點,又由于一個頁只能存3個key,首先將10,20,5插入進去(實際上此步發生了3次插入),然后在頁面內做數據排序,最終結果如下圖:
步驟二:
由于根頁面已經寫滿,此時插入8,將發生分裂(根頁面分裂),大致步驟如下:
注意:在分裂過程中,根結點始終是不會變的,不管變成多大的樹,根結點的頁面號始終如一。
步驟五:
插入數據40,發現比根結點23大,找到103號頁面,發現已滿,執行分裂,分裂同上面葉子結點的分裂步驟。分裂后如圖所示:
步驟六:
繼續插入下一個數據9,因為比20小,找到101號頁面,發現已滿,需要做葉子結點分裂,如下圖:
傳統B+樹的數據刪除,一般都會有一個所謂的填充因子,來控制頁面數據的刪除比例,如果數據量小于這個填充因子所表示的數據量,就會有節點合并,這與分裂是相對應的。
InnoDB的實現與傳統B+樹算法有不同之處,InnoDB在刪除索引數據時,會先檢查當前頁剩余的記錄數,如果只剩下一條記錄,就會直接將這個頁面從B+樹中摘除,也只有這種情況,InnoDB才會回收一個頁面,InnoDB的頁面沒有合并一說,但是對于根節點,即使索引數據全部刪除,根節點頁依然存在,只不過是以空頁的形式存在。
下面舉個例子描述索引刪除過程,前提條件與前面插入記錄時一致。
刪除數據 50
刪除過程全部結束,最終得到一個空的索引頁。
《MySQL運維內參》
B+樹動畫演示: