레코드 수가 1만, 10만, 100만, 1000만 인 테이블에 인덱스를 사용한 쿼리와 사용하지 않은 쿼리 차이를 알아보았다.
= 실제 프로젝트와 차이가 있을 수 있다.
툴
AWS
데이터 - 공공 데이터 사용
위에 작성한 공공 데이터 포털에서 CSV 파일을 다운 받아서 테이블을 생성하였다.
인덱스로 사용할 마땅한 컬럼이 없으므로 AUTO_INCREASE 속성을 가진 새로운 컬럼을 추가해 pk를 생성한다. (pk는 자동으로 인덱스로 추가된다.)
ALTER TABLE [테이블이름]
ADD COLUMN idx int NOT NULL primary key AUTO_INCREMENT;
기본 키는 처음부터 인덱스로 지정되기 때문에 따로 명시하진 않았다.
UPDATE [테이블이름]
SET [컬럼이름] = floor(RAND() * n);
0~n-1 인 난수 생성
여기서 n은 카디널리티 / 총 레코드 수 다.
테이블에 임의로 생성했던 num
컬럼을 idx_range
인덱스로 등록한다.
ALTER TABLE [테이블이름]ADD INDEX idx_range ( num );
이 글을 작성하기 전에 1천 부터 10만 까지 실행을 해보았지만 10만부터 스캔 방법에 따라 수행 속도 차이가 생기기 시작했다.
더 큰 단위의 테이블이 필요했지만 공공데이터 포털에서 레코드 수 10만을 넘어가는 파일을 구하기 힘들었다.