2020-1-28 TIL
MySQL table생성하고 bulk insert하기
CREATE TABLE `authors` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`first_name` VARCHAR(50) NOT NULL COLLATE 'utf8_unicode_ci',
`last_name` VARCHAR(50) NOT NULL COLLATE 'utf8_unicode_ci',
`age` INT(11) NOT NULL,
`gpa` FLOAT(3,2) NOT NULL,
`email` VARCHAR(100) NOT NULL COLLATE 'utf8_unicode_ci',
`birthdate` DATE NOT NULL,
`added` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE INDEX `email` (`email`)
)
- mysql dummy데이터를 생성하기 위한 방법을 찾고있다. mysql 프로시저를 이용한 데이터를 생성하거나 dummy data를 생성해주는 사이트에서 직접 데이터를 생성한다.
- mysqlworkbench를 이용해서 생성된 dummy data 100행을 삽입을 하니 시간이 0.07sec가 소요가 되었다.
- 이제 10000행, 1000000행, 100000000행 등 계속해서 늘려나가면서 테스트를 해볼 예정이다. 이 과정에서 여러개의 데이터베이스로 나눌 예정이다.
- dummy data를 생성하는 홈페이지에서 데이터를 100k까지 데이터 생성 지원을 해준다. 우선은 에러가 있어서 45600개의 데이터를 삽입하였다.
- select문에 대한 조건을 걸어서 테스트를 해봐야겠다.
select * from authors where age > 1; // duration 0.025 fetch time 0.129sec
select * from authors where age > 50; // 대충 0.01초가 소요가 된다.
select * from authors where email like 'a%'; // 0.01~0.0026 sec
create index age_index on authors(age);
show indexes from authors; // age index type is BTREE
select * from authors where age = 30; // 0.0027 sec
select * from authors where age > 30; // 0.012 sec
- 왜 동일한 쿼리를 여러번 날리면 시간이 점점 줄어드는것일까?
- BTREE인덱스를 사용했기때문에 등호 연산자가 동등연산자보다 더 빠르다고 했는데, 실제 결과는 그렇지가 않다. 왜그럴까? 캐싱? 이런게 걸려있어서 그런가.
오늘의 느낀점과 질문
- dummy data를 구하는것도 쉽지않다. 사이트를 이용했음에도 불구하고 최대 100k까지의 데이터를 제공해준다고 했는데, 이런저런 이유로 46k정도의 데이터를 제공해줬다. mysql workbench를 통해 데이터를 insert하고 있는데, 몇만개의 행을 한꺼번에 실행하기 위해서는 cmd + shift + enter를 눌러야됬는데 그것도 몰라서 처음에 그냥 잘 안됬다.
- 특히 전체 insert를 하는 부분에 대해서는 아직까지 잘 모르겠다. 내일은 시간체크하는걸 찾아봐야곘다.
- Q1. 각 row에 대한 insert time은 출력이 되는데, 전체 출력은 어떻게 해야되는가?
- Q2. query 실행을 하면 fetch time과 duration이 출력이 되는데 이 둘의 차이는?
- Q3. index를 만들었는데, BTREE인덱스로 나왔다. 이 인덱스는 동등연산자보다 비교연산자에서 성능이 나온다고 했는데, 직접 실행을 해보니 동등연산자에서 오히려 시간이 더 적게 걸렸다. 이유는? 데이터가 너무 적어서 인가?
- Q4. 내가 동일한 조건문을 호출할때마다 점점 시간이 줄어든다. 그러다가 어느정도 지나면 수렴이 되는데 select를 할때도 캐싱? 이런게 있는건가??
오늘 직접 테스트를 하면서 위의 4가지 질문들이 궁금했다. 내일 이 질문들에 대한 답을 찾아봐야겠다. 무엇보다도 데이터를 어느정도 확보를 해야될까? 내 생각에는 최소 100만개에서 10억개정도의 데이터셋이 필요할거같은데, 어디서 그렇게 데이터를 구할 수 있을지 모르겠다.
Written on January 27, 2020