1. 程式人生 > 實用技巧 >008.mysql-mysql高水位線問題,刪除資料、插入資料索引不連續帶來的頁內資料空洞,表實際佔用空間增大

008.mysql-mysql高水位線問題,刪除資料、插入資料索引不連續帶來的頁內資料空洞,表實際佔用空間增大

mysql高水位線問題:

刪除資料、

插入資料索引不連續帶來的頁內資料空洞,表實際佔用空間增大

優化:

alter table table_name engine = InnoDB

相當於建立臨時表,把表刪除後,重新插入資料

原理:

InnoDB引擎只會把R4這個記錄標記為刪除

案例:

模擬資料 不斷插入刪除資料

CREATE TABLE `gaoshuiwei` (
  `rid` int(20) NOT NULL AUTO_INCREMENT,
  `org_name` varchar(255) DEFAULT NULL,
  `update_time` timestamp NULL
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`rid`), UNIQUE KEY `org_id` (`rid`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=109592 DEFAULT CHARSET=utf8mb4;

CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_gaoshuiwei`()
BEGIN

    DECLARE i int(4) DEFAULT 0;
    
    while
i < 10000 do insert into gaoshuiwei( org_name ) select '迴圈一般在儲存過程和儲存函式中使用' ; set i = i+1; end while; DELETE from gaoshuiwei where rid %2=1; END

查看錶大小

select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data

from information_schema.TABLES

where table_schema='test' and table_name='gaoshuiwei';

清理髒資料後-查看錶大小

alter table table_name engine = InnoDB


select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data

from information_schema.TABLES

where table_schema='test' and table_name='gaoshuiwei';