可変長と固定長の文字列データの処理速度を比べてみた
環境
windows10+MySQL8.0
前提
VARCHAR型
CHAR型と異なり、格納する文字列の長さの調整はされない。
VARCHAR(10):10バイト以下の文字列でも、それに合わせた領域が確保される。(※最大長以上(10バイト以上)の文字列の格納はできない。)
CHAR型
固定長の文字列データを扱うデータ型。
CHAR(10):格納される列は常に10バイトになる。
10バイトに満たない場合は文字列の右側に空白が追加され、10バイトぴったりに調整される。
記憶領域は比較して大きく取るがその代わり検索などの処理は比較的早くなる。
--テーブル作成、データ追加、全件検索
create table users (name varchar(10),age int); --0.015sec
insert into users values('山田',21); --0.000sec
insert into users values('佐藤',36); --0.000sec
insert into users values('鈴木',30); --0.000sec
insert into users values('山本',18); --0.000sec
select * from users; --0.000sec
create table users_fix (name char(10),age int); --0.032sec
insert into users_fix values('山田',21); --0.016sec
insert into users_fix values('佐藤',36); --0.000sec
insert into users_fix values('鈴木',30); --0.016sec
insert into users_fix values('山本',18); --0.000sec
select * from users_fix; --0.000sec
余り変化がなかったので、100万件のデータを作成して、CSVファイル(Book.csv)の形で追加して確認してみた
--読み込み速度(固定長文字列,可変長文字列)
load data local infile 'C:/Book.csv'
into table test.users_fix
fields
terminated by ','
enclosed by '\n';
-- 2.797sec
load data local infile 'C:/Book.csv'
into table test.users_flex
fields
terminated by ','
enclosed by '\n';
-- 2.594sec
--固定長と可変長のSELECT文の処理時間比較
select count(*) from users_fix;
-- 0.031 sec
select count(*) from users_flex;
-- 0.047 sec
結論
データが増えてくると実行時間に差が発生するのが確認できた。
固定長の方が可変長に比べて処理時間は短かった。
ただし、キャッシュ等の影響も考えられるので注意が必要。