tft每日頭條

 > 圖文

 > mysql各種數據統計優化

mysql各種數據統計優化

圖文 更新时间:2024-08-30 03:23:46

随着業務的發展,數據庫數據規模不斷增加,我們就要對數據庫容量進行擴容,RDS 一般支持在線擴容,但是數據庫成本還是比較高的,一般我們需要分析一下數據的增長,并确認數據的保留周期。如果有些數據不需要一直保留,例如保留 3 個月就可以了,那麼,我們就可以對這部分數據進行備份,然後删除這部分數據。下面做一個測試。

創建表

創建 test 測試表,包含三個字段,兩個二級索引。

CREATE TABLE `test` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `a` (`a`), KEY `b` (`b`));

然後查看一下,數據文件的大小,如下圖:

mysql各種數據統計優化(縮減表空間占用測試)1

查詢一下 MySQL 提供的統計信息,命令及結果如下:

SELECT CONCAT( table_schema, '.', table_name ) AS 'Table Name', CONCAT( ROUND( table_rows / 1000, 4 ), 'K' ) AS 'Number of Rows', CONCAT( ROUND( data_length /( 1024 ), 4 ), 'K' ) AS 'Data Size', CONCAT( ROUND( index_length /( 1024 ), 4 ), 'K' ) AS 'Index Size', CONCAT( ROUND(( data_length index_length )/( 1024 ), 4 ), 'K' ) AS 'Total' FROM information_schema.TABLES WHERE table_schema LIKE 'mysql_study' and table_name like 'test';

mysql各種數據統計優化(縮減表空間占用測試)2

插入 10 萬條數據

現在我們往測試表 test 中,插入 10 萬條數據。

delimiter ;; create procedure idata() begin declare i int; set i=1; while(i<=10000)do insert into test values(i, i, i); set i=i 1; end while; end;; delimiter ; call idata();

插入 10 萬數據後,文件占用的大小如下圖:

mysql各種數據統計優化(縮減表空間占用測試)3

mysql各種數據統計優化(縮減表空間占用測試)4

Number of Rows 為 9.98K,不是 10 K。information_schema.TABLES 中數據為統計值,存在偏差。

删除數據

我們嘗試使用 delete 删除 test 表中數據。

delete from test;

删除後,數據文件大小如下圖:

mysql各種數據統計優化(縮減表空間占用測試)5

由上圖可以發現,文件沒有變小,統計信息如下圖,它發生了變化。

mysql各種數據統計優化(縮減表空間占用測試)6

重建表

現在我們嘗試重建表,使用下面的命令

alter table test engine=InnoDB;

重建表後,數據庫文件大小如下圖:

mysql各種數據統計優化(縮減表空間占用測試)7

由上圖可以發現,文件變小了,恢複到,表新建時的大小,達到了我們縮減表空間的目的。 下圖是此時的 MySQL 的統計信息。

mysql各種數據統計優化(縮減表空間占用測試)8

結論

1、information_schema.TABLES 數據為統計值;

2、表空間占用要看實際文件大小;

3、重建表可以縮減表空間占用。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved