인프런 커뮤니티 질문&답변
인덱스에 대하여
작성
·
358
답변 1
1
index는 검색 속도 빠르게 하는 것입니다. 중복, null 이런 것과 관련 없습니다.
pk나 unique는 고유값이라서 자동으로 인덱스 걸려 있습니다.
검색할 때 자주 검색하는 조건들에 index 걸어주시면 됩니다. 다만 여러 개에 동시에 걸 수도 있고 index 순서도 중요합니다. 그리고 index를 거는게 성능상 안 좋은 경우도 있습니다.
네 복합 인덱스는 클래스 위에 다는 게 맞습니다. 다만 @Index간의 순서가 중요한 게 아니라
firstName, lastName이냐, lastName, firstName이냐 순서가 중요합니다.
firstName, lastName 인덱스인데 where lastName = 'cho' and firstName = 'zero'로 쿼리하면 인덱스 효과를 못봅니다.
아 그럼 where firstname ='zero' and lastname ='cho' 이런식으로 where을 2개로 찾을떄
@Index(['firstname'.'lastname'])을 클레스 위에써주는거고.
where firstname = 'zero'이런식으로 하나만 사용하여 찾을때는
그냥 컬럼위에 @Index() 써주면된다는거군요.
@Index(['firstname','lastname']) 이렇게 해놓고 where firstname ='zero' 이나 where lastname ='cho' 이런식으로 하나만 사용한 where문은 효과를 못보는건가요??
@Index(['firstname'.'lastname']) 이렇게 하면 참고로 where firstName = 'zero'만 할 때도 저 인덱스가 사용됩니다. where lastName = 'cho'는 안 됩니다.
감사합니다.
그럼 혹시 개별 컬럼 @Index()시에는 where lastName = 'cho' and firstName = 'zero' 이것도 효과를 볼수있나요?? (마지막 질문)






답변 감사합니다.
다만, index순서가 중요하다고 하셨는데 제가 이해한게 맞나 모르겠습니다.
한테이블에서 여러컬럼 인덱스 지정을 한다했을경우,
중복성이 낮은순 --> 높은순 으로 순서를 지정해야하고,
Typeorm에서 지정하는방법은
위 처럼 하면 순서대로 인덱스를 지정할수있는것인가요? (firstname, middlename, lastname순)
근데 인덱스 firstname, lastname은 중복되는데 뭔지모르겠네요...
이렇게 개별 컬럼에 인덱스를 하면 순서지정을 못할것같아서요.
제가 이해한게 맞나요??