MYSQL 分析表、檢查表和優化表


1. 對表進行優化 ( 優化表主要作用是消除刪除或者更新造成的空間浪費)

2. 對表進行分析(分析關鍵字的分布, 分析並存儲MyISAM和BDB表中鍵的分布)

3. 對表進行檢查(檢查表的錯誤,並且為MyISAM更新鍵的統計內容)

4. 對表進行修復(修復被破壞的MyISAM表)
 
1.分析表
 
MySQL中使用ANALYZE TABLE語句來分析表,該語句的基本語法如下:
 
ANALYZE TABLE 表名1 [,表名2…] ;
使用ANALYZE TABLE分析表的過程中,數據庫系統會對表加一個只讀鎖。在分析期間,只能讀取表中的記錄,不能更新和插入記錄。ANALYZE TABLE語句能夠分析InnoDB和MyISAM類型的表。
 
【示例18-8】 下面使用ANALYZE TABLE語句分析score表,分析結果如下:
 
mysql> ANALYZE TABLE score; 
+-------------+-----------+--------------+---------------+ 
| Table    | Op     | Msg_type | Msg_text  | 
+-------------+-----------+--------------+---------------+ 
| test.score | analyze | status    | OK       | 
+-------------+-----------+--------------+---------------+ 
1 row in set (0.05 sec)
上面結果顯示了4列信息,詳細介紹如下:
 
Table:表示表的名稱;
 
Op:表示執行的操作。analyze表示進行分析操作。check表示進行檢查查找。optimize表示進行優化操作;
 
Msg_type:表示信息類型,其顯示的值通常是狀態、警告、錯誤和信息這四者之一;
 
Msg_text:顯示信息。
 
檢查表和優化表之后也會出現這4列信息。

 

對表的定期分析可以改善性能,且應該成為常規維護工作的一部分。因為通過更新表的索引信息對表進行分析,可改善數據庫性能。

有三種方法可以對表進行分析:

1. 連接到MySQL時,使用ANALYZE TABLE語句

2. 利用mysqlcheck命令行工具(服務器需要運行,並且只對MyISAM表起作用)

3. 利用myisamchk命令行工具(服務器不應該運行,或無對所操作的表發生互操作)

# ANALYZE TABLE 表名;

# mysqlcheck -a 數據庫名 表名 -uroot -p111111

# mysqlcheck -a 數據庫名 表名1 表名2 -uroot -p111111

如果試圖對不支持分析操作的表進行分析(如InnoDB),那操作將無法進行

# myisamchk -a /usr/local/mysql/data/數據庫/表名


 
2.檢查表
 
MySQL中使用CHECK TABLE語句來檢查表。CHECK TABLE語句能夠檢查InnoDB和MyISAM類型的表是否存在錯誤。而且,該語句還可以檢查視圖是否存在錯誤。該語句的基本語法如下:
 
CHECK TABLE 表名1 [,表名2…] [option] ;
其中,option參數有5個參數,分別是QUICK、FAST、CHANGED、MEDIUM和EXTENDED。這5個參數的執行效率依次降低。 option選項只對MyISAM類型的表有效,對InnoDB類型的表無效。CHECK TABLE語句在執行過程中也會給表加上只讀鎖。
 
3.優化表
 
MySQL中使用OPTIMIZE TABLE語句來優化表。該語句對InnoDB和MyISAM類型的表都有效。但是,OPTILMIZE TABLE語句只能優化表中的VARCHAR、BLOB或TEXT類型的字段。OPTILMIZE TABLE語句的基本語法如下:
 
OPTIMIZE TABLE 表名1 [,表名2…] ;
通過OPTIMIZE TABLE語句可以消除刪除和更新造成的磁盤碎片,從而減少空間的浪費。OPTIMIZE TABLE語句在執行過程中也會給表加上只讀鎖。
 
說明:如果一個表使用了TEXT或者BLOB這樣的數據類型,那么更新、刪除等操作就會造成磁盤空間的浪費。因為,更新和刪除操作后,以前分配的磁盤空間不會自動收回。使用OPTIMIZE TABLE語句就可以將這些磁盤碎片整理出來,以便以后再利用。

 

優化表有很多方式實現: OPTIMIZE TABLE語句、mysqlcheck工具(服務器要運行)或myisamchk(服務器沒有運行或表中沒有交互)

為什么優化?隨着MySQL的使用,包括BLOB和VARCHAR字節的表將變得比較繁冗,因為這些字段長度不同,對記錄進行插入、更新或刪除時,會占有不同大小的空間,記錄就會變成碎片,且留下空閑的空間。像具有碎片的磁盤,會降低性能,需要整理,因此要優化。

1. 利用OPTIMIZE語句對表進行優化

# mysql>OPTIMIZE TABLE 表名

這樣就對表名進行了優化。

2. 利用mysqlcheck對表進行優化

mysqlcheck可進行優化外,還可執行大量的檢查和修復任務。

# mysqlcheck -o 數據庫名 表名 -uroot -p111111 (一張表)

# mysqlcheck -o 數據庫名 表名1 表名2 -uroot -p111111 (多張表)

# mysqlcheck -o 數據庫名 -uroot -p111111 (對整個數據庫)

3. 利用myisamchk對表進行優化

# myisamchk --quick --check-only-changed --sort-index --analyze 表名

# myisamchk -r 表名 (參數-r表示對表進行修復,同時也刪去了浪費的空間)

# myisamchk -r /usr/local/mysql/data/testblog/article (指定表所在的路徑)

以上操作需在服務器關閉或沒有與服務器互操作的時候,可以使用myisamchk命令行工具(如果服務器正在運行,那么在運行這條語句之前利用 mysqladmin flush-tables對表進行刷新。需確保服務器沒有與表進行互操作,否則會出現故障)。myisamchk是最老的方法。必須在正確位置上運行 myisamchk,或者指定表所在的路徑。

注意:在優化過程中,表會被鎖住,因此不要在忙時進行優化操作。同樣,需要有足夠的空間才能進行OPTIMIZE TABLE。如果沒有磁盤空間,MySQL將不能進行優化,表也無法使用。

優化是對包含MyISAM表的數據庫的常規管理事務中一個重要環節,應該定期進行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM