-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
인덱스에 대하여
22.03.25 15:25 작성 조회수 260
0
제로초님 MYSQL에 PK말고 인덱스라는게 있던데,
둘의 차이가 PK에서 중복허용, null허용 해준게 index 인것 맞나요?
PK와 index를 둘다거는것도 가능한지 의미있는지 궁금합니다.
사용예로 유저 email과 같은 where에 자주 사용되는것(null일수도있음)에 index걸어주면 되는걸까요?
답변을 작성해보세요.
1
조현영
지식공유자2022.03.25
index는 검색 속도 빠르게 하는 것입니다. 중복, null 이런 것과 관련 없습니다.
pk나 unique는 고유값이라서 자동으로 인덱스 걸려 있습니다.
검색할 때 자주 검색하는 조건들에 index 걸어주시면 됩니다. 다만 여러 개에 동시에 걸 수도 있고 index 순서도 중요합니다. 그리고 index를 거는게 성능상 안 좋은 경우도 있습니다.
노른자
질문자2022.03.25
답변 감사합니다.
다만, index순서가 중요하다고 하셨는데 제가 이해한게 맞나 모르겠습니다.
한테이블에서 여러컬럼 인덱스 지정을 한다했을경우,
중복성이 낮은순 --> 높은순 으로 순서를 지정해야하고,
Typeorm에서 지정하는방법은
위 처럼 하면 순서대로 인덱스를 지정할수있는것인가요? (firstname, middlename, lastname순)
근데 인덱스 firstname, lastname은 중복되는데 뭔지모르겠네요...
이렇게 개별 컬럼에 인덱스를 하면 순서지정을 못할것같아서요.
제가 이해한게 맞나요??
조현영
지식공유자2022.03.25
네 복합 인덱스는 클래스 위에 다는 게 맞습니다. 다만 @Index간의 순서가 중요한 게 아니라
firstName, lastName이냐, lastName, firstName이냐 순서가 중요합니다.
firstName, lastName 인덱스인데 where lastName = 'cho' and firstName = 'zero'로 쿼리하면 인덱스 효과를 못봅니다.
노른자
질문자2022.03.25
아 그럼 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문은 효과를 못보는건가요??
조현영
지식공유자2022.03.25
@Index(['firstname'.'lastname']) 이렇게 하면 참고로 where firstName = 'zero'만 할 때도 저 인덱스가 사용됩니다. where lastName = 'cho'는 안 됩니다.
노른자
질문자2022.03.25
감사합니다.
그럼 혹시 개별 컬럼 @Index()시에는 where lastName = 'cho' and firstName = 'zero' 이것도 효과를 볼수있나요?? (마지막 질문)
답변 1