mysql分析表命令_MySql分析整理命令
Analyze Table 分析表------------------------------------------------------------MySQL 的Optimizer(優化元件)在優化SQL語句時,首先需要收集一些相關信息,其中就包括表的cardinality(可以翻譯為“散列程度”)。
它表示某個索引對應的列包含多少個不同的值——如果cardinality大大少于數據的實際散列程度,那么索引就基本失效了。我們可以使用SHOW INDEX語句來查看索引的散列程度:
mysql> SHOW INDEX FROM log_secretkey_download;
+------------------------+------------+-------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+------------------------+------------+-------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+
| log_secretkey_download | 0 | PRIMARY | 1 | id | A | 925508 | NULL | NULL | | BTREE | |
| log_secretkey_download | 1 | index_eu883 | 1 | download_time | A | NULL | NULL | NULL | | BTREE | |
| log_secretkey_download | 1 | index_sysid | 1 | sysid | A | NULL | NULL | NULL | | BTREE | |
+------------------------+------------+-------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+
3 rows in set因為此時log_secretkey_download表中,有兩個字段的Cardinality為null, 正常是應該有值的。
下面我們通過Analyze Table語句來修復索引:ANALYZE local TABLE log_secretkey_download;
完成后再看索引,正常了mysql> SHOW INDEX FROM log_secretkey_download;
+------------------------+------------+-------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+------------------------+------------+-------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+
| log_secretkey_download | 0 | PRIMARY | 1 | id | A | 925586 | NULL | NULL | | BTREE | |
| log_secretkey_download | 1 | index_eu883 | 1 | download_time | A | 231396 | NULL | NULL | | BTREE | |
| log_secretkey_download | 1 | index_sysid | 1 | sysid | A | 9 | NULL | NULL | | BTREE | |
+------------------------+------------+-------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+
3 rows in set此時索引已經修復,查詢效率大大提高。需要注意的是,如果開啟了binlog,那么Analyze Table的結果也會寫入binlog,我們可以在analyze和table之間添加關鍵字local取消寫入。Checksum Table--------------------------------------------------------------數據在傳輸時,可能會發生變化,也有可能因為其它原因損壞,為了保證數據的一致,我們可以計算checksum(校驗值)。使用MyISAM引擎的表會把checksum存儲起來,稱為live checksum,當數據發生變化時,checksum會相應變化。在執行Checksum Table時,可以在最后指定選項qiuck或是extended;quick表示返回存儲的checksum值,而extended會重新計算checksum,如果沒有指定選項,則默認使用extended。Optimize Table 整理表 --------------------------------------------------------------經常更新數據的磁盤需要整理碎片,數據庫也是這樣,Optimize Table語句對MyISAM和InnoDB類型的表都有效。如果表經常更新,就應當定期運行Optimize Table語句,保證效率。與Analyze Table一樣,Optimize Table也可以使用local來取消寫入binlog。
mysql> Optimize local Table log_secretkey_download;
+---------------------------------+----------+----------+----------------------------------------------------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+---------------------------------+----------+----------+----------------------------------------------------------------------------------------------------+
| configdb.log_secretkey_download | optimize | Error | Table './configdb/log_secretkey_download' is marked as crashed and last (automatic?) repair failed |
| configdb.log_secretkey_download | optimize | Error | Table 'log_secretkey_download' is marked as crashed and last (automatic?) repair failed |
| configdb.log_secretkey_download | optimize | error | Corrupt |
+---------------------------------+----------+----------+----------------------------------------------------------------------------------------------------+
3 rows in set
Repair Table 修復表--------------------------------------------------------------用于修復表,只對MyISAM和ARCHIVE類型的表有效。這條語句同樣可以指定選項:QUICK:最快的選項,只修復索引樹。EXTENDED:最慢的選項,需要逐行重建索引。USE_FRM:只有當MYI文件丟失時才使用這個選項,全面重建整個索引。與Analyze Table一樣,Repair Table也可以使用local來取消寫入binlog。
mysql> Repair local Table log_secretkey_download;
+---------------------------------+--------+----------+----------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+---------------------------------+--------+----------+----------------------------------------------+
| configdb.log_secretkey_download | repair | warning | Number of rows changed from 339826 to 925655 |
| configdb.log_secretkey_download | repair | status | OK |
+---------------------------------+--------+----------+----------------------------------------------+
2 rows in setCheck Table 檢查表--------------------------------------------------------------數據庫經常可能遇到錯誤,譬如數據寫入磁盤時發生錯誤,或是索引沒有同步更新,或是數據庫未關閉MySQL就停止了。遇到這些情況,數據就可能發生錯誤:Incorrect key file for table: ' '. Try to repair it.此時,我們可以使用Check Table語句來檢查表及其對應的索引。譬如我們運行mysql> CHECK TABLE log_secretkey_download;
+---------------------------------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+---------------------------------+-------+----------+----------+
| configdb.log_secretkey_download | check | status | OK |
+---------------------------------+-------+----------+----------+
1 row in setMySQL會保存表最近一次檢查的時間,每次運行check table都會存儲這些信息:執行SELECT TABLE_NAME, CHECK_TIMEFROM INFORMATION_SCHEMA.TABLESWHERE TABLE_NAME = 'PLAYERS'AND TABLE_SCHEMA = 'TENNIS'; /*TENNIS是數據庫名*/結果是TABLE_NAME CHECK_TIME---------- -------------------PLAYERS 2006-08-21 16:44:25Check Table還可以指定其它選項:UPGRADE:用來測試在更早版本的MySQL中建立的表是否與當前版本兼容。QUICK:速度最快的選項,在檢查各列的數據時,不會檢查鏈接(link)的正確與否,如果沒有遇到什么問題,可以使用這個選項。FAST:只檢查表是否正常關閉,如果在系統掉電之后沒有遇到嚴重問題,可以使用這個選項。CHANGED:只檢查上次檢查時間之后更新的數據。MEDIUM:默認的選項,會檢查索引文件和數據文件之間的鏈接正確性。EXTENDED:最慢的選項,會進行全面的檢查。
總結
以上是生活随笔為你收集整理的mysql分析表命令_MySql分析整理命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql索引要点_mysql表索引的一
- 下一篇: mysql初始化root 密码是多少_M