008.mysql-mysql高水位線問題,刪除資料、插入資料索引不連續帶來的頁內資料空洞,表實際佔用空間增大
阿新 • • 發佈:2020-09-03
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 NULLDEFAULT 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; whilei < 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';