[Mysql] index 효율성
지난 시간에 인덱스란 무엇인지, 인덱스 명령어 등을 알아보았다. 이번 시간에는 인덱스를 설정을 하였을 때 과연 조회 속도가 빨라지는가를 알아보겠다.
index를 설정을 하면 조회 속도가 빨라질까?
일단 먼저 해당 테이블을 생성하고, 데이터를 넣어보았다. 극단적인 차이를 보여주기 위해 많은 데이터를 넣으려고 했지만 5000개 까지 밖에 못 넣었다.
우선 터미널에서 mysql 서버에 접속하여 알아보겠다.
현재의 인덱스 상태는 pk값인 id 컬럼에 인덱스가 설정이 되어 있고, name 컬럼에는 인덱스가 설정 되지 않았다. 그렇다면 이제 조회를 통해 얼마나 속도의 차이가 있는지 알아보겠다.
- id(인덱스 설정) 조회
SELECT * FROM user WHERE id BETWEEN 1 AND 5000;
조회한 결과 0.01 sec이 걸렸다.
- name(인덱스 설정 x) 조회
SELECT * FROM user WHERE name BETWEEN 'user1' AND 'user5000';
조회 결과 0.05 sec이 걸렸다.
결과로 보았을 땐, 인덱스 설정이 되어 있는 id를 조회하는 것이 약 0.03 sec이 빨랐다.
name의 문자열 길이가 더 길어서 이러한 차이가 난 것일까? 비교 대상이 잘 못되어 있는것 같다.
다시 비교 해보기
이번엔 id, name, email 컬럼을 추가 하였다. 문자열의 길이가 최대한 비슷하게끔 (1, ‘username1’, ‘userEmail1’) 이런 식으로 넣어서 5000개를 넣었다. 다시 비교 해보자.
터미널에서 MySQL 서버에 접속해서 조회를 했더니 5000개가 있지만 workbench에는 1000개 밖에 조회가 안된다.
또한 MySQL workbench에서 조회한 결과도 다르다. 이번엔 MySQL workbench에서 조회를 해보겠다.
그리고 이번엔 특정 값을 조회 하게끔 하겠다.
- id(인덱스 설정) 조회
SELECT * FROM user WHERE id = 548;
조회 결과 0.0077 sec이 걸렸다.
- name 조회
SELECT * FROM user WHERE name 'username548';
조회 결과 0.044 sec이 걸렸다.
- email 조회
SELECT * FROM user WHERE email 'userEmail548';
조회 결과 0.0057 sec이 걸렸다.
인덱스로 설정된 id로 조회한 결과가 인덱스 설정이 안된 email 조회한 결과 보다 느렸다. 얼마 차이가 안나지만 현재 내 노트북으로는 비교가 불가능 한 것 같다.
그래서 다른 사람의 결과를 참고를 해보도록 하겠다.
다른 사람의 비교 결과
- 인덱스 설정 컬럼 : idx
- 인덱스 설정 안된 컬럼 : name
둘을 비교 한다. 데이터의 개수는 약 4만건 이다.
조회 결과 idx로 조회할 땐 0.5 ms가 걸렸고, name 컬럼을 조회 할 땐 31.9ms가 걸렸다.
이렇게 속도의 차이를 보였다.
비교 환경을 어떻게 했는지는 잘 모르겠지만 차이가 분명했다.
마치며
인덱스를 설정 함에 따라 조회 결과를 직접 비교를 해보려고 했으나, 환경을 구성하는데 있어 실패함에 따라 다른 사람의 결과를 가져왔다. 결과는 인덱스 설정 컬럼 조회 속도가 빨랐다.
다음에는 그렇다면 ‘인덱스는 어떤 컬럼에 설정을 해야 하는가?’ 에 대해 알아보겠다.
댓글남기기