【Mysql優化】索引碎片與維護


 

  在長期的數據更改過程中, 索引文件和數據文件,都將產生空洞,形成碎片.(不停的刪除修改導致)

 

解決辦法:

(1)我們可以通過一個nop操作(不產生對數據實質影響的操作), 來修改表.

  比如: 表的引擎為innodb , 可以 alter table xxx engine innodb(修改表的引擎類型為其默認類型會重新調整數據,但不會影響數據)

 

mysql> SHOW create table t\G
*************************** 1. row ***********************
       Table: t
Create Table: CREATE TABLE `t` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(40) DEFAULT NULL,
  `idCard` char(18) DEFAULT NULL,
  `sex` char(1) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `idCard` (`idCard`),
  KEY `sex` (`sex`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.02 sec)

mysql> alter table t engine myisam;
Query OK, 0 rows affected (0.25 sec)
Records: 0  Duplicates: 0  Warnings: 0

 

 

 

 

 

(2)optimize table 表名 ,也可以修復.

mysql> optimize  table exam;
+------------+----------+----------+--------------------------------------------
-----------------------+
| Table      | Op       | Msg_type | Msg_text
                       |
+------------+----------+----------+--------------------------------------------
-----------------------+
| exam9.exam | optimize | note     | Table does not support optimize, doing recr
eate + analyze instead |
| exam9.exam | optimize | status   | OK
                       |
+------------+----------+----------+--------------------------------------------
-----------------------+
2 rows in set (1.14 sec)

 

 

注意: 修復表的數據及索引碎片,就會把所有的數據文件重新整理一遍,使之對齊.

    這個過程,如果表的行數比較大,也是非常耗費資源的操作.

    所以,不能頻繁的修復.

 

如果表的Update操作很頻率,可以按周/月,來修復.

如果不頻繁,可以更長的周期來做修復.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM