国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MYSQL中OPTIMIZE TABLE優化使用方法

2024-07-24 12:37:29
字體:
來源:轉載
供稿:網友

Optimize Table是mysql中一個可以及回收更多的空間、減少“碎片” (defragment)命令,但有些朋友說可以提升mysql性能這個我具體不清楚,下面找了一些相關文章大家參考一下.

OPTIMIZE TABLE 用于回收閑置的數據庫空間,當表上的數據行被刪除時,所占據的磁盤空間并沒有立即被回收,使用了OPTIMIZE TABLE命令后這些空間將被回收,并且對磁盤上的數據行進行重排(注意:是磁盤上,而非數據庫)。

多數時間并不需要運行OPTIMIZE TABLE,只需在批量刪除數據行之后,或定期,每周一次或每月一次,進行一次數據表優化操作即可,只對那些特定的表運行.

先了解一下OPTIMIZE TABLE對InnoDB 和 MyISAM相關知識

1. InnoDB 和 MyISAM

目前支持optimize命令的引擎有 MyISAM, InnoDB, and ARCHIVE,對于InnoDB,會將optimize命令映射為ALTER TABLE命令,該命令會重建數據表,更新索引統計信息、回收主鍵索引中空間。

2. InnoDB 和 MyISAM

如果你的MySQL是有備庫的,如果你只希望在主庫上執行的話,那么可以加上關鍵字NO_WRITE_TO_BINLOG,或者LOCAL,意思完全相同.

OPTIMIZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE

這對于MM結構的MySQL數據庫尤為重要,因為很多時候,你只是想在備庫上執行,而不希望影響主庫.

在mysql命令方式下使用如下代碼:

#ls -lah users_0.ibd -rwxr-xr-x 1 mysql dba 736M May 6 09:50 users_0.ibd root@test 10:10:53>optimize table users_0

測試實例

1、先來看看多次刪除插入操作后的表索引情況,代碼如下:

  1. mysql> SHOW INDEX FROM `tbl_name`; 
  2. +----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
  3. Table    | Non_unique | Key_name   | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | 
  4. +----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
  5. | tbl_name |          0 | PRIMARY    |            1 | StepID      | A         |           1 |     NULL | NULL   |      | BTREE      |         | 
  6. | tbl_name |          1 | FlowID     |            1 | FlowID      | A         |           1 |     NULL | NULL   |      | BTREE      |         | 
  7. | tbl_name |          1 | WagerCount |            1 | WagerCount  | A         |           1 |     NULL | NULL   |      | BTREE      |         | 
  8. | tbl_name |          1 | WagerID_3  |            1 | WagerID     | A         |           1 |     NULL | NULL   |      | BTREE      |         | 
  9. | tbl_name |          1 | WagerID_3  |            2 | StepType    | A         |           1 |     NULL | NULL   |      | BTREE      |         | 
  10. | tbl_name |          1 | WagerID_3  |            3 | ParamResult | A         |           1 |      255 | NULL   |      | BTREE      |         | 
  11. | tbl_name |          1 | StepType_2 |            1 | StepType    | A         |           1 |     NULL | NULL   |      | BTREE      |         | 
  12. | tbl_name |          1 | StepType_2 |            2 | ParamResult | A         |           1 |      255 | NULL   |      | BTREE      |         | 
  13. | tbl_name |          1 | WagerID_2  |            1 | WagerID     | A         |           1 |     NULL | NULL   |      | BTREE      |         | 
  14. | tbl_name |          1 | WagerID_2  |            2 | StepType    | A         |           1 |     NULL | NULL   |      | BTREE      |         | 
  15. | tbl_name |          1 | WagerID_2  |            3 | ParamResult | A         |           1 |      255 | NULL   |      | BTREE      |         | 
  16. +----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
  17. 11 rows in set (0.01 sec)  --Vevb.com 

2、優化表,代碼如下:

  1. mysql> optimize table tbl_name; 
  2. +---------------+----------+----------+----------+ 
  3. Table         | Op       | Msg_type | Msg_text | 
  4. +---------------+----------+----------+----------+ 
  5. | test.tbl_name | optimize | status   | OK       | 
  6. +---------------+----------+----------+----------+ 
  7. 1 row in set (40.60 sec) 

3、再來看看優化后的效果,代碼如下:

  1. mysql> SHOW INDEX FROM `tbl_name`; 
  2. +----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
  3. Table    | Non_unique | Key_name   | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | 
  4. +----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 
  5. | tbl_name |          0 | PRIMARY    |            1 | StepID      | A         |      172462 |     NULL | NULL   |      | BTREE      |         | 
  6. | tbl_name |          1 | FlowID     |            1 | FlowID      | A         |       86231 |     NULL | NULL   |      | BTREE      |         | 
  7. | tbl_name |          1 | WagerCount |            1 | WagerCount  | A         |        4311 |     NULL | NULL   |      | BTREE      |         | 
  8. | tbl_name |          1 | WagerID_3  |            1 | WagerID     | A         |       86231 |     NULL | NULL   |      | BTREE      |         | 
  9. | tbl_name |          1 | WagerID_3  |            2 | StepType    | A         |      172462 |     NULL | NULL   |      | BTREE      |         | 
  10. | tbl_name |          1 | WagerID_3  |            3 | ParamResult | A         |      172462 |      255 | NULL   |      | BTREE      |         | 
  11. | tbl_name |          1 | StepType_2 |            1 | StepType    | A         |           9 |     NULL | NULL   |      | BTREE      |         | 
  12. | tbl_name |          1 | StepType_2 |            2 | ParamResult | A         |       86231 |      255 | NULL   |      | BTREE      |         | 
  13. | tbl_name |          1 | WagerID_2  |            1 | WagerID     | A         |       86231 |     NULL | NULL   |      | BTREE      |         | 
  14. | tbl_name |          1 | WagerID_2  |            2 | StepType    | A         |      172462 |     NULL | NULL   |      | BTREE      |         | 
  15. | tbl_name |          1 | WagerID_2  |            3 | ParamResult | A         |      172462 |      255 | NULL   |      | BTREE      |         | 
  16. +----------+------------+------------+--------------+-------------+-----------+-------------+--- 

如果在php中使用,PHP程序,代碼如下:

  1. header("Content-type: text/html; charset=utf-8"); 
  2. set_time_limit(0); 
  3.  echo date('Y-m-d H:i:s').'Begin<br/>'
  4.  /* 
  5.  *使用OPTIMIZE TABLE 優化表空間 
  6.  *回收空間,減少碎片 
  7.  */ 
  8.  mysql_connect('localhost''root''123456'or die('數據庫連接失敗'.mysql_error()); 
  9.  mysql_query('SET NAME UTF8'); 
  10.  $database = 'db3'
  11.  mysql_select_db($database); 
  12.  $res = mysql_query('SHOW TABLES FROM '.$database); 
  13.  while($row = mysql_fetch_row($res)) 
  14.  { 
  15.   $table = $row[0]; 
  16.   $sql = sprintf('OPTIMIZE TABLE %s.%s'$database$table); 
  17.   if(mysql_query($sql)) 
  18.   { 
  19.    echo '優化表'.$table.'完成。<br>'
  20.   } 
  21.   else 
  22.   { 
  23.    echo '優化表'.$table.'失敗。'.mysql_error(); 
  24.    exit
  25.   } 
  26.  } 
  27.  echo date('Y-m-d H:i:s').'End<br/>'

看完文章后理解.

作用:回收空間,減少碎片

方法:OPTIMIZE TABLE tablename

情景:磁盤耗盡、InnoDB Tablespaces用完,先用OPTIMIZE TABLE 命令優化,再考慮擴容.

注意:OPTIMIZE 命令支持的引擎MyIsam,InnoDB,ARCHVE,對于InnoDB,它會重建數據表、更新索引統計信息、回收主鍵索引空間.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 应城市| 上杭县| 绥棱县| 绥中县| 山东省| 巨鹿县| 玉环县| 天等县| 五台县| 安庆市| 合肥市| 新河县| 榆树市| 朝阳市| 二连浩特市| 故城县| 都兰县| 淳化县| 墨脱县| 永丰县| 庆城县| 靖安县| 平乡县| 东阳市| 武平县| 大埔县| 自贡市| 宣威市| 乌苏市| 桓仁| 西青区| 邳州市| 余江县| 依兰县| 延长县| 洱源县| 上思县| 金阳县| 华池县| 蓝山县| 许昌市|