天天看点

【转】利用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)