1. 칼럼 추가 속도 테스트
INNODB
MariaDB [tpch]> alter table lineitem add L_NEWCOL int ;
Query OK, 0 rows affected (3 min 51.14 sec)
ColumnStore
MariaDB [columnstore]> alter table lineitem add L_NEWCOL int ;
Query OK, 0 rows affected (3.28 sec)
2. 칼럼 삭제 속도 테스트
ColumnStore
MariaDB [columnstore]> alter table lineitem drop L_NEWCOL ;
Query OK, 0 rows affected (1.74 sec)
INNODB
MariaDB [tpch]> alter table lineitem drop L_NEWCOL ;
Query OK, 0 rows affected (3 min 17.03 sec)
3. 설명
칼럼을 추가 하거나 삭제 할 경우, 변경 된 테이블(임시테이블)을 새로 하나 만들고 기존의 데이터를 임시테이블로 모두 옮긴 후
이름을 바꿔 주는 방식으로 진행이 된다.
그래서 칼럼이 추가 되거나, 삭제 될 경우 그 시간은 비슷하며, Null 허용 칼럼이 추가가 되더라도 테이블의 파일 사이즈가 증가 한다.
ColumnStore 방식은 칼럼 단위의 데이터를 저장하는 익스텐트가 따로 존재 하기 때문에 기존의 모든 Row에 칼럼을 추가해서 새로 만들지 않아도 되므로
메타 데이터 및 초기 익스텐트 생성 정도의 시간만이 필요하게 된다.
MariaDB [tpch]> alter table lineitem drop L_NEWCOL ; 명령을 수행 했을 때, O/S상에서는 아래와 같이 하나의 임시테이블을 생성하고 작업이 진행 되며,
-rw-rw---- 1 mysql mysql 3960 Jan 18 20:38 lineitem.frm
-rw-rw---- 1 mysql mysql 1627389952 Jan 18 20:42 lineitem.ibd
-rw-rw---- 1 mysql mysql 3929 Jan 18 20:45 #sql-52b3_a.frm
-rw-rw---- 1 mysql mysql 1375731712 Jan 18 20:48 #sql-ib30-3600589058.ibd
모든 데이터가 임시테이블로 모두 옮겨 졌을 때 rename으로 변경 작업이 이루어 진다.
-rw-rw---- 1 mysql mysql 3929 Jan 18 20:45 lineitem.frm
-rw-rw---- 1 mysql mysql 1619001344 Jan 18 20:49 lineitem.ibd