這里介紹兩個簡單的優化MySQL數據庫表的方法
一、定期分析表和檢查表
1.分析表語法如下:
alalyze [local|no_write_to_binlog] table table_name1[,table_name2]...
用於分析和存儲表的關鍵字分布,分析后可以使系統等到更准確的統計信息,
使得SQL能夠生成正確的執行計划。在分析表期間,使用一個讀取鎖定對表進行鎖定。
對於MyISAM、BDB、和InnoDB表有用。
2.檢查表語法如下:
check table table_name[,table_name2]...[option]...option={QUICK|FAST|MEDIUM|EXTENDED|CHANGED}
檢查表的作用是檢查一個或者多個表是否有錯誤。也可以檢查視圖是否有錯誤。check table 對MyISAM和
InnoDB有作用。
二、定期優化表
優化表的語法如下:
optimize [local|no_write_to_binlog] table table_name1[,table_name2]...
如果刪除了表的一大部分,或者對含有可變長度列的表(含有varchar、blob、text列的表)進行了很多更改,
則應該使用optimize table 命令來進行表優化。optimize 可以合並表中的空間碎片,消除由於刪除或者更新造成的
空間浪費。該命令只對MyISAM、BDB、InnoDB表起作用。
對於InnoDB表來說,可以設置innodb_file_per_table參數,設置InnoDB為獨立表空間模式,這樣每個數據庫的的每個
表都會生成一個獨立的ibd文件,用戶存儲表的數據可和索引。這樣可以一定程度上減輕InnoDB表空間的回收問題。
另外,再刪除大量數據后,InnoDB可以通過alter table 但不修改存儲引擎的方式回收不用的空間。
alter table table_name engine=innodb;
注意:analyze、check、optimize、alter table 執行期間都會鎖表,因此要在數據庫不繁忙的時候執行相關操作。