MYSQL 分析表、檢查表和最佳化表

來源:互聯網
上載者:User

標籤:blog   http   使用   io   strong   資料   ar   art   

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表的資料庫的常規管理事務中一個重要環節,應該定期進行。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.