MariaDB の InnoDB/MyISAM の速度差?

Yossy
2023-07-12
2023-07-12

ストレージエンジンによって速度変わるという話はを聞くので、どのくらい差があるのかなの思い試してみます。

■ 取り込みデータの準備

今回は、郵便局さんが提供していただいている、郵便番号データ(124,270行)を取り込んでみます。

https://www.post.japanpost.jp/zipcode/download.html

※UTF形式の CSV が提供されているので、そちらを利用します。最近提供が始まったようです?

■ テーブル作成

文字コード utf8mb4_general_ci で `bench` という名前のデータベース作成

CREATE DATABASE `bench`;

CSV には 15 列のデータがあるので、以下のようなテーブルを作成します。

CREATE TABLE `jzip` (
    `A` VARCHAR(1024) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
    `B` VARCHAR(1024) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
    `C` VARCHAR(1024) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
    `D` VARCHAR(1024) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
    `E` VARCHAR(1024) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
    `F` VARCHAR(1024) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
    `G` VARCHAR(1024) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
    `H` VARCHAR(1024) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
    `I` VARCHAR(1024) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
    `J` VARCHAR(1024) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
    `K` VARCHAR(1024) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
    `L` VARCHAR(1024) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
    `M` VARCHAR(1024) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
    `N` VARCHAR(1024) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
    `O` VARCHAR(1024) NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci'
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB
;

■ mariaDB の処理文字コードを UTF8 に変更(文字化け回避)

SET character_set_database=utf8;

■ 郵便番号 CSV を一括で取り込みの速度計測

InnoDB でテスト

以下の処理を、複数回実施

truncate table `bench`.`jzip`;
load data local infile '/var/www/html/utf_all.csv' into table bench.jzip fields terminated by ',' enclosed by '"';

Query OK, 124578 rows affected (1.382 sec)
Query OK, 124578 rows affected (1.842 sec)
Query OK, 124578 rows affected (1.502 sec)
Query OK, 124578 rows affected (1.955 sec)
Query OK, 124578 rows affected (1.453 sec)

MyISAM でテスト

エンジンを MyISAM に変更

ALTER TABLE `bench`.`jzip` ENGINE=MyISAM;

以下の処理を、複数回実施

truncate table `bench`.`jzip`;
load data local infile '/var/www/html/utf_all.csv' into table bench.jzip fields terminated by ',' enclosed by '"';

Query OK, 124578 rows affected (0.537 sec)
Query OK, 124578 rows affected (0.536 sec)
Query OK, 124578 rows affected (0.535 sec)
Query OK, 124578 rows affected (0.533 sec)
Query OK, 124578 rows affected (0.540 sec)

■ まとめ

単純に CSV を取り込むだけだと、そこまで速度差でないかもと思ってたんですが、結構、ハッキリ差が出たなという感想でした。

もう少し、いくつかのパターンでベンチできればと思いますので、引き続き、調査したいと思います。