天天看點

【轉】利用optimize、存儲過程和系統表對mysql資料庫表進行批量碎片清理釋放表空間

本文收集于本人的筆記本,由于找不到原文出處。在此省略,如哪位知道可以聯系我加上。

這個存儲過程目的是給一個庫的所有表來整理碎片的。一個表随着插入很頻繁,或者一直更新不停的,就會積累好多碎片。如果及時整理一下,查詢效率會高出好多。

調用示例:

mysql> use mysql

Database changed

mysql> call sp_optimize_tables('david_test');

+------------------------------+----------+----------+----------+

| Table                        | Op       | Msg_type | Msg_text |

| david_test.test1 | optimize | status   | OK       |

1 row in set (0.26 sec)

+--------------------------+----------+----------+----------+

| Table                    | Op       | Msg_type | Msg_text |

| david_test.test2| optimize | status   | OK       |

1 row in set (0.35 sec)

+---------------------------------------+----------+----------+----------+

| Table                                 | Op       | Msg_type | Msg_text |

| david_test.test3 | optimize | status   | OK       |

1 row in set (0.45 sec)

| david_test.test_article | optimize | status   | OK       |

1 row in set (4.13 sec)

...

+----------------------------------+----------+----------+----------+

| Table                            | Op       | Msg_type | Msg_text |

| david_test.test_article_content | optimize | status   | OK       |

1 row in set (37.81 sec)

+-----------------------+----------+----------+----------+

| Table                 | Op       | Msg_type | Msg_text |

| david_test.members | optimize | status   | OK       |

1 row in set (40.02 sec)

+--------------------+----------+----------+----------+

| Table              | Op       | Msg_type | Msg_text |

| david_test.test_site | optimize | status   | OK       |

1 row in set (40.31 sec)

+--------------+----------+----------+----------+

| Table        | Op       | Msg_type | Msg_text |

| david_test.t | optimize | status   | OK       |

1 row in set (41.10 sec)

Query OK, 0 rows affected (41.13 sec)