본문 바로가기
개발/ETC

Index가 적용되지 않는 경우 정리

by devhooney 2023. 5. 11.
728x90

1. 인덱스에 들어있는 컬럼을 수정하면 인덱스가 적용되지 않는다.

num이라는 컬럼이 인덱스에 들어 있을 때,

SELECT * FROM table WHERE num + 10 = 30 // Index 적용 안됨
SELECT * FROM table WHERE num = 20 + 10 // Index 적용 됨

 

2. Null을 조건에서 사용한 경우 인덱스가 적용되지 않는다.

SELECT * FROM users WHERE num IS NULL // Index 적용 안됨
SELECT * FROM users WHERE num IS NOT NULL // Index 적용 안됨
SELECT * FROM users WHERE num > 0 // Index 적용 됨
SELECT * FROM users WHERE num > '' // Index 적용 됨

 

3. Not을 조건에서 사용한 경우 인덱스가 적용되지 않는다.

Not일 경우 무조건 인덱스가 적용 안되는 것은 아니지만, 일반적으로 Not에 사용되는 값이 아닌 데이터 비율이 높은 경우가 많기 때문에 인덱스가 적용이 안된다.

SELECT * FROM users WHERE num != 10 // Index 적용 안됨
SELECT * FROm users WHERE num < 20 AND num > 10 // Index 적용 됨

 

4. Like를 조건에서 사용할 때 앞에 %를 붙인 경우 인덱스가 적용되지 않는다.

SELECT * FROM users WHERE q LIKE '%a%' // Index 적용 안됨
SELECT * FROM users WHERE q LIKE 'a%' // Index 적용 됨

 

5. In을 조건에서 사용한 경우 인덱스가 적용되지 않는다.

In을 사용한다고 항상 인덱스가 적용 안되는 것은 아니지만, In에 포함돈 데이터의 비율이 높으면 DB가 판단하여 인덱스를 적용하지 않는다.

SELECT * FROM users WHERE num IN (1, 2, 3)

 

6. 인덱스의 컬럼 순서대로 조건에서 사용하지 않은 경우 인덱스가 적용되지 않는다.

인덱스가 name, age 순서인 경우

SELECT * FROM users WHERE name = 'a' AND age = 10 // Index 적용 됨
SELECT * FROM users WHERE age = 10 AND name = 'a' // Index 적용 안됨

 

 

 

 

- 참조

https://hckcksrl.medium.com/index%EB%A5%BC-%ED%83%80%EC%A7%80%EC%95%8A%EB%8A%94-%EC%BF%BC%EB%A6%AC-41f0417bfe03

728x90

'개발 > ETC' 카테고리의 다른 글

URI is not absolute 해결  (68) 2023.10.04
REST API 란?  (0) 2023.06.08
PK와 UK 차이  (1) 2023.04.25
Git, SVN 차이  (0) 2023.04.24
로그인 세션, 토큰 장단점  (0) 2023.04.22