維護MySQL資料庫表

2019-10-16 22:55:46

在本教學中,我們將向您介紹一些非常有用的語句,使您可以在MySQL中維護資料庫表。

MySQL提供了幾個有用的語句,可以有效地維護資料庫表。 這些語句使您能夠分析,優化,檢查和修復資料庫表。

分析表語句

MySQL查詢優化器是MySQL伺服器的重要組成部分,為查詢建立了一個最佳的查詢執行計劃。 對於特定查詢,查詢優化器使用儲存的金鑰分發和其他因素來決定在執行連線時應將表進行連線的順序,以及哪個索引應用於特定表。

然而,金鑰分發可能有時不準確,例如,在表中進行了大量資料更改(包括插入刪除更新)之後。如果金鑰分發不準確,則查詢優化器可能會選擇可能導致嚴重效能問題的錯誤查詢執行計劃。

要解決此問題,您可以為該表執行ANALYZE TABLE語句,例如,以下語句分析範例資料庫(yiibaidb)中的payments表。如下所示 -

mysql> ANALYZE TABLE payments;
+-------------------+---------+----------+----------+
| Table             | Op      | Msg_type | Msg_text |
+-------------------+---------+----------+----------+
| yiibaidb.payments | analyze | status   | OK       |
+-------------------+---------+----------+----------+
1 row in set

如果執行ANALYZE TABLE語句後表沒有變化,MySQL將不會再次分析表。 如果再次執行上述語句:

mysql> ANALYZE TABLE payments;
+-------------------+---------+----------+----------+
| Table             | Op      | Msg_type | Msg_text |
+-------------------+---------+----------+----------+
| yiibaidb.payments | analyze | status   | OK       |
+-------------------+---------+----------+----------+
1 row in set

當前表已經是最新的狀態了。

優化表語句

在使用資料庫時,可以進行許多更改,如插入刪除更新表中的資料,這可能會導致表的物理儲存碎片化。因此,資料庫伺服器的效能下降。

MySQL提供了一個語句,允許您優化表以避免此碎片整理問題。 以下說明如何優化表:

OPTIMIZE TABLE table_name;

建議您對經常更新的表執行此語句。例如,如果要優化orders表進行碎片整理,可以執行以下語句:

mysql> OPTIMIZE TABLE orders;
+-----------------+----------+----------+-------------------------------------------------------------------+
| Table           | Op       | Msg_type | Msg_text                                                          |
+-----------------+----------+----------+-------------------------------------------------------------------+
| yiibaidb.orders | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| yiibaidb.orders | optimize | status   | OK                                                                |
+-----------------+----------+----------+-------------------------------------------------------------------+
2 rows in set

檢查表語句

資料庫伺服器可能會發生錯誤,例如,伺服器意外關閉,將資料寫入硬碟時出錯,等等。這些情況可能導致資料庫執行不正確,並且在最壞的情況下可能會崩潰。

MySQL允許您使用CHECK TABLE語句檢查資料庫表的完整性。以下說明CHECK TABLE語句的語法:

CHECK TABLE table_name;

CHECK TABLE語句檢查表及其索引。 例如,可以使用CHECK TABLE語句來檢查訂單表,如下所示:

CHECK TABLE orders;

執行上面語句,結果如下 -


mysql> CHECK TABLE orders;
+-----------------+-------+----------+----------+
| Table           | Op    | Msg_type | Msg_text |
+-----------------+-------+----------+----------+
| yiibaidb.orders | check | status   | OK       |
+-----------------+-------+----------+----------+
1 row in set

CHECK TABLE語句僅檢測資料庫表中的問題,但不會修復它們。要修復表,請使用REPAIR TABLE語句。

修復表語句

REPAIR TABLE語句允許您修復資料庫表中發生的一些錯誤。 MySQL不保證REPAIR TABLE語句可以修復表所有可能的錯誤。

以下是EPAIR TABLE語句的語法:

REPAIR TABLE table_name;

假設orders表中有一些錯誤,需要修復它們,可以使用REPAIR TABLE語句,如下查詢所示:

REPAIR TABLE employees;

MySQL返回表中所做的內容,並顯示表是否已修復。

註: REPAIR TABLE方法僅適用於MyISAMARCHIVECSV表。

在本教學中,您已經學到了一些非常方便的語句來維護MySQL中的資料庫表。