表的维护
30.1 表的維護操作的類型
1.一個表檢查執行一個完整性檢查來確保表的結構和內容沒有問題。這個操作能夠被做對于MyISAM和InnoDB表
2.一個表的修復更正完整性問題來修復表到一個已知和可使用狀態。這個可以使用MyISAM表來做。
3.一個表的分析更新數據關于索引鍵值的分布。一個優化者可以使用的信息來產生更好的執行計劃對于表的查詢。這個操作可以由MyISAM和InnoDB存儲引擎來做。
4.一個表的優化識別表以至于它的內容可以更加有效的被獲得。這操作可以由MyISAM和InnoDB表來做。
表分析和優化你可以執行周期性的檢測來保持你的表在最好的狀態下:
1.當MySQL分析一個MyISAM或者InnoDB表時,它更新索引數據。這個優化者使用這些數據,當處理查詢時來做出更好的決定關于如何更好地查詢相關額記錄在表中和順序讀取表在一個join中。
2.當MySQL優化一個MyISAM表時,它重新收回沒有使用的空間,排序索引和更新索引數據。周期性的defragmenting是有用的加速表的訪問對于包含可變長度的列如VARCHAR,或者TEXT。
30.2 ?SQL 語句對于Table維護
有一下的語句來進行表的維護:
1.check table用來完整性檢查,如果check table有輸出表明表有問題,這個表應該被修復
2.repair table用來修復,修復已經corrupted的表
3.analyze table用于分析,
4.optimize table用來優化
30.3 client和utility程序對于Table MainTence
一些MySQL的客戶端提供了一個front end 來提出table-maintenance語句:
1.MySQL Administrator提供了一個point-and-click接口用于表的檢測,修復和優化操作。
2.mysqlcheck能夠用來check,repair,analyze和optimize表。它決定了
30.3.1 這mysqlcheck客戶端程序
mysqlcheck檢測,修復,分析和優化表。它能夠執行所有這些操作在MyISAM表上,和能夠執行他們中的一些在InnoDB表上。它提供一個command-line接口對于各種SQL語句來指導服務器來執行表的維護,例如CHECK TABLE
使用--database(or -B)選項,mysqlcheck翻譯它的非選項參數作為數據塊的名字和檢測所有表在每個命名的數據庫中。這接下來命令檢查表在world和test數據庫:
mysqlcheck --databases world test
30.3.2 這myisachk
和mysqlcheck不同:
1.myisamchk能夠disabling或者enabling索引,盡管這些操作
2.兩個程序很大的不同在它們的操作模式上。mysqlcheck是一個客戶單程序和Mysql共享通過一個網絡連接。這意味著mysqlcheck需要服務器運行。相反,myisamch并不是一個客戶端程序。它直接操作代表MyISAM表的文件。
3.這兩種程序它們的關系也是不同的。使用myisamchk,你需要確保服務器沒有讓表open和沒有同時使用它們。它是可能的得到錯誤的結果引發表毀壞如果表文件被使用myisamchk和服務器同時使用。使用myisamchk時先停止server。
30.4 repairing InnoDB Tables
30.5 Enabling MyISAM自動修復
總結
- 上一篇: 建议锁
- 下一篇: 31.1 inforMATION_SCH