Mysql分析 檢查 優化表

2021-10-04 13:04:45 字數 2747 閱讀 1104

對錶進行分析(分析關鍵字的分布, 分析儲存myisam等表中鍵的分布)

mysql中使用analyze table語句來分析表,該語句的基本語法如下:

mysql> analyze table 表名1 [,表名2…] ;

使用analyze table分析表的過程中,資料庫系統會對錶加乙個唯讀鎖。在分析期間,只能讀取表中的記錄,不能更新和插入記錄。analyze table語句能夠分析innodb和myisam型別的表。

table:表示表的名稱;

op:表示執行的操作。analyze表示進行分析操作。check表示進行檢查查詢。optimize表示進行優化操作;

msg_type:表示資訊型別,其顯示的值通常是狀態、警告、錯誤和資訊這四者之一;

msg_text:顯示資訊。

對錶的定期分析可以改善效能,且應該成為常規維護工作的一部分。因為通過更新表的索引資訊對錶進行分析,可改善資料庫效能。

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

連線到mysql時,使用analyze table語句

利用mysqlcheck命令列工具(伺服器需要執行,並且只對myisam表起作用)

利用myisamchk命令列工具(伺服器不應該執行)

#analyze table 表名;

#mysqlcheck -a 資料庫名 表名 -uroot -p111111

#mysqlcheck -a 資料庫名 表名1 表名2 -uroot -p111111

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

#myisamchk -a /usr/local/mysql/data/資料庫/表名

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

mysql中使用check table語句來檢查表。check table語句能夠檢查innodb和myisam型別的表是否存在錯誤。而且,該語句還可以檢查檢視是否存在錯誤。該語句的基本語法如下:

mysql> check table 表名1 [,表名2…] [option] ;

其中,option引數有5個引數,分別是quick、fast、changed、medium和extended。這5個引數的執行效率依次降低。 option選項只對myisam型別的表有效,對innodb型別的表無效。check table語句在執行過程中也會給表加上唯讀鎖。

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位元組的表將變得比較繁冗,因為這些字段長度不同,對記錄進行插入、更新或刪除時,會占有不同大小的空間,記錄就會變成碎片,且留下空閒的空間。像具有碎片的磁碟,會降低效能,需要整理,因此要優化。

利用optimize語句對錶進行優化

mysql> optimize table 表名

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

利用mysqlcheck對錶進行優化

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

#mysqlcheck -o 資料庫名 表名 -uroot -p111111 (一張表)

#mysqlcheck -o 資料庫名 表名1 表名2 -uroot -p111111 (多張表)

#mysqlcheck -o 資料庫名 -uroot -p111111 (對整個資料庫)

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

Mysql分析 檢查 優化表 分析表

1.分析表 對錶進行分析 分析關鍵字的分布,分析儲存myisam等表中鍵的分布 mysql中使用analyze table語句來分析表,該語句的基本語法如下 mysql analyze table 表名1 表名2 使用analyze table分析表的過程中,資料庫系統會對錶加乙個唯讀鎖。在分析期間...

MySQL優化 檢查 修復 分析 優化

在介紹mysql的檢查 修復 分析 優化等知識點之前,先來了解下mysql的命令列工具mysqlcheck mysqlcheck u username p password c r a o dbname tablename c check table tablename 檢查表 r repair t...

mysql建表效能優化 MYSQL建表優化

除非單錶資料未來會一直不斷 否則不要一開始就考慮拆分,拆分會帶來邏輯 部署 運維的各種複雜度,一般以整型值為主的表在千萬級以下,字串為主的表在五百萬以下是沒有太大問題的。1 字段 a 盡量使用tinyint smallint medium int作為整數型別而非int,如果非負則加上unsigned...