반응형
Index
index 확인
> db.users.getIndexes();
< [ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
인덱스 생성: 오름차순(1), 내림차순(-1)
db.users.createIndex({필드명: 1 or -1})
> db.users.createIndex({name: 1})
백그라운드 옵션: {background: true}
이미 데이터가 많은 경우 인덱스를 생성하는 과정에서 오랜 시간이 소요될 수 있음
> db.users.createIndex({name: 1}, {background: true})
고유 인덱스 생성: {unique: true}
중복 데이터가 생성되지 못하도록 함. 데이터 저장과 검색속도 향상에 도움이 됨.
> db.users.createIndex({name: 1}, {unique: true, dropDups: true})
특정필드 인덱스 삭제: dropIndex({"name":1});
> db.user.dropIndex({"name":1});
모든 인덱스 삭제: dropIndexes();
> db.user.dropIndexex();
인덱스 설정에 따른 검색속도 개선
- 대량의 테스트 데이터 생성
for(i = 0; i < 1000000; i++){
db.users.insert({
"i": i,
"username" : "user_" + i,
"age": Math.floor(Math.random() * 120),
"created" : new Date()
});
}
- 인덱스가 없는 상태에서 조회후 소요시간 확인
> db.users.find({username: 'user_90100'}).explain('executionStats');
<{
< ...
< "executionStats" : {
< ...
< "executionTimeMillis" : 621,
< ...
< },
< ...
<}
- 인덱스 생성
> db.users.createIndex({"username": 1});
- 다시 조회 후 소요시간 확인
> db.users.find({username: 'user_90100'}).explain('executionStats');
<{
< ...
< "executionStats" : {
< ...
< "executionTimeMillis" : 1,
< ...
< },
< ...
<}
인덱스 사용시 주의사항
모든 쓰기(읽기, 갱신, 삭제) 작업은 인덱스 때문에 더 오래 걸림
데이터가 변경될 때마다 문서 자체와 모든 인덱스를 갱신함
몽고디비는 콜렉션당 최대 64개까지 인덱스를 가지도록 제한됨
일반적으로 콜렉션에 2~3개 이상의 인덱스를 가지지 않는 게 좋음
몽고디비는 인덱스 구축이 완료될 때까지 DB의 모든 읽기 쓰기를 중단하고 인덱스를 구축하게 됨
background 옵션을 사용하면 인덱스 구축 중 다른 작업이 가능하나 인덱스 구축 속도는 느림
반응형
'DB' 카테고리의 다른 글
[MongoDB] 샤딩 시스템 (0) | 2022.02.24 |
---|---|
[MongoDB] 기본 CRUD 방법과 예시 (0) | 2022.02.04 |
[MySQL][GCP] SQL 이모지 데이터 입력시 오류, charset utf8mb4로 변경 (0) | 2020.09.04 |
[GCP] MySQL timezone 타임존 변경 (0) | 2020.06.08 |
[MSSQL] 배치파일을 이용해 주기적으로 DB 백업하기, 파일 삭제하기 (0) | 2020.05.07 |