(참고)
오늘 팀프로젝트 발표를 보는데,
다른 조에서 한 분이 인덱스 함수를 활용한 것을 보았다.
사실 인덱스라는 것을 SQLD 시험 볼 때 개념적으로만 봤었지, 실제로 인덱스라는 함수가 있고 이를 활용하는 것을 처음 봤기에, 그리고 발표자분이 언급 없이 넘어가서 정확히는 보지 못했지만 코드 효율을 높이기 위해 사용했다는 언급을 보고...
관심이 생겨서 찾아보았다.
일단 개념적으로는 내가 알던 것과 동일하다
미리 원하는 부분을 추출해놓고,
데이터를 조회할 때 전체를 스캔하는 게 아니라 이렇게 추출한 부분만을 가져와 스캔하는 것이다.
그렇기에 자주 조회를 하게 되는 부분에 대해서만 제한적으로 인덱스를 사용하는 것이 중요하며,
insert, delete와 같은 DML 구문을 사용했을 때 인덱스된 부분을 manage하게 된다면 오히려 비효율적이게 될 수 있다.
그렇기 때문에 인덱스는 자주 조회하면서도 거의 변화하지 않는 데이터에 대해 제한적으로 사용하는 것이 효율적이다
다만 위 참고 링크에서도 언급되지만, 실제 업무를 할 때는 인덱스 함수 사용을 지양하는 것을 추천한다고...
정말 필요한 경우에만 제한적으로
이번 프로젝트의 경우에도 데이터 row 수가 100만개를 넘어가다보니 단순한 select도 필터링을 충분히 하지 않으면 연산에 몇 초씩 걸리곤 했는데,
이럴 때 정도는 인덱스 함수를 잘 사용한다면 쾌적한 sql life가 되지 않았을까
CREATE INDEX [인덱스명] ON [테이블명](컬럼1, 컬럼2, 컬럼3.......);
EX> CREATE INDEX EX_INDEX ON CUSTOMERS(NAME,ADDRESS);
// UNIQUE 키워드를 붙이면 컬럼값에 중복값을 허용하지 않는다는 뜻
EX> CREATE[UNIQUE] INDEX EX_INDEX ON CUSTOMERS(NAME,ADDRESS);
ALTER TABLE 테이블명 ADD INDEX(필드명(크기));
CREATE TABLE 테이블 명 ( 필드명 데이터타입(데이터크기), INDEX(필드명(크기)) ENGINE MyISAM;
--
여담으로 윈도우 인덱스 시스템이 굉장히 일을 못하기로 유명(...)한데,
다음 버전엔 everything.exe를 사용하지 않아도 되는 개선을 좀 보여줬으면...