CSV出力時とDB格納時のサイズはおよそ同じ
(8.0.29)
-- 1. テストデータ作成
drop table tab1;
create table tab1(
col1 int primary key
,col2 bigint
,col3 datetime
,col4 varchar(100)
);
drop procedure proc1;
delimiter //
create procedure proc1(in x int)
begin
declare i int;
set i = 0;
start transaction;
while i < x do
set i = i + 1;
insert into tab1 values(
i
,floor(rand() * 1000000000000)+1
,date_add('2001-01-01', interval floor(365*20*24*3600 * rand() ) second)
,substring(md5(rand() ), 1, 30)
);
end while;
commit;
end
//
delimiter ;
call proc1(10000000);
select count(*) from tab1;
select * from tab1 order by rand() limit 20;
analyze table tab1;
select
table_name
,table_rows
,avg_row_length
,data_length/1024/1024/1024 tableGB
,index_length/1024/1024/1024 indexGB
from information_schema.tables
where table_schema = database()
and table_name = 'tab1'
;
件数: 1千万
データサイズ: 680M
-- 2. CSV出力
show variables like 'secure_file_priv';
select * into outfile '/var/lib/mysql-files/tab1.csv'
fields terminated by ',' optionally enclosed by '"'
from tab1;
CSVファイルサイズ: 723M
-- 3. 結果
CSVファイルサイズはDB格納時サイズとほぼ同じ
(19c)
-- 1. テストデータ作成
drop table tab1 purge;
create table tab1(
col1 int primary key
,col2 int
,col3 timestamp
,col4 varchar2(100)
);
declare
begin
for i in 1..10000000 loop
insert into tab1 values
(i
,floor(dbms_random.value(1, 1000000000001) )
,to_date('20010101','yyyymmdd') + floor(dbms_random.value(0, 365*20*24*3600) )/24/3600
,substr(standard_hash(dbms_random.value(), 'MD5'),1,30)
);
end loop;
end;
/
commit;
select count(*) from tab1;
select * from tab1 order by dbms_random.value() fetch first 20 rows only;
select sum(bytes/1024/1024/1024) bytes from user_segments where segment_name ='TAB1';
件数: 1千万
データサイズ: 617M
-- 2. CSV出力
set trims on
set head off
set feed off
set echo off
set termout off
set verify off
set pagesize 0
set linesize 32767
set markup csv on quote on
alter session set nls_timestamp_format='YYYY/MM/DD HH24:MI:SS';
col col2 format 999999999999999999
spool tab1.csv
select * from tab1;
exit
spoo off
sqlplus test/test@pdb1 @a.sql
CSVファイルサイズ: 742M
-- 3. 結果
CSVファイルサイズはDB格納時サイズより少し大きい
(14)
-- 1. テストデータ作成
drop table tab1;
create table tab1(
col1 int primary key
,col2 bigint
,col3 timestamp
,col4 varchar(100)
);
start transaction;
insert into tab1 select
g
,floor(random() * 1000000000000)+1
,'2001-01-01'::date + CAST( floor(365*20*24*3600*random() ) || 'second' AS interval)
,substring(md5(random()::text), 1, 30)
from generate_series(1,10000000) g;
commit;
select count(*) from tab1;
\pset pager 0
select * from tab1 order by random() limit 20;
select pg_size_pretty(pg_relation_size('tab1') );
件数: 1千万
データサイズ: 805M
-- 2. CSV出力
COPY tab1 TO '/tmp/tab1.csv' WITH ( FORMAT csv, NULL '', QUOTE '"', FORCE_QUOTE * );
CSVファイルサイズ: 761M
-- 3. 結果
CSVファイルサイズはDB格納時サイズとほぼ同じ
(2019)
-- 1. テストデータ作成
drop table tab1;
create table tab1(
col1 int primary key
,col2 bigint
,col3 datetime2
,col4 varchar(100)
);
set nocount on
declare @i int;
set @i = 1;
begin transaction;
while @i <= 10000000
begin
insert into tab1 values(
@i
,floor(rand() * 1000000000000)+1
,dateadd(second,floor(365*20*24*3600 * rand() ),'2001-01-01')
,substring(master.dbo.fn_varbintohexstr(HASHBYTES('MD5',cast(rand() as varchar) ) ),3,30)
);
set @i = @i + 1;
end
commit;
select count(*) from tab1;
select top 20 * from tab1 order by newid();
exec sp_spaceused 'dbo.tab1';
go
件数: 1千万
データサイズ: 744M
-- 2. CSV出力
bcp "select col1,col2,QUOTENAME(col3,'""'),QUOTENAME(col4,'""') from test.dbo.tab1" queryout "C:\test\tab1.csv" -T -c -t,
Get-Content .\tab1.csv | Select-Object -first 100
(Get-Item .\tab1.csv).Length
CSVファイルサイズ: 808M
-- 3. 結果
CSVファイルサイズはDB格納時サイズより少し大きい