티스토리 뷰
# 몽고디비 인덱스
:인덱스명은 자동생성되며, 인덱스명으로 제어는 불가능함.
>> 생성
db.컬렉션.createIndex()
>> 조회
db.컬렉션.getIndexes()
>> 삭제
db.컬렉션.dropIndex() or dropIndexes()
db.runCommnad({dropIndex:'emp', index:{eno:-1}})
>> 인덱스 재생성
db.컬렉션.reIndex()
>> 실습 (1:오름차순, -1:내림차순)
db.employees.createIndex({comm:1})
db.employees.getIndexes()
db.employees.reIndex()
db.employees.createIndex({empno:1}) -- 싱글키 인덱스
db.employees.createIndex({empno:1, deptno:-1}) -- 복합키 인덱스
db.employees.createIndex({deptno:1})
db.employees.find({deptno: 10}).pretty()
>> 실행계획보기
db.employees.find({deptno: 10}).explain()
>> Unique & Non-Unique 인덱스
db.employees.dropIndex({empno:1})
db.employees.createIndex({empno:1},{unique:true})
>> Sparse 인덱스
- 조건을 만족하는 데이터의 양과 밀도가 낮은 경우
- 다음은 comm 값이 존재하는 Document로만 인덱스를 생성
db.employees.dropIndex({comm:1})
db.employees.createIndex({comm:1},{sparse:true})
db.employees.find({comm:300}).explain()
>> Partial 인덱스 (3.2버전부터 추가됨)
- 조건에 만족하는 데이터만을 대상으로 인덱스를 생성
db.employees.createIndex({deptno:1, ename:1},{partialFilterExpression:{sal:{$gt:500}}})
db.employees.find({deptno:10, sal:{$gt:2500}}).explain()
>> Backgroud 인덱스
- 시스템자원을 우선적으로 지원받아 생성하게 되는 인덱스임.
제한적으로 꼭 필요한 경우에만 사용해야 함.
db.employees.createIndex({hiredate:1},{background:true})
>> Covered 인덱스
- 인덱스만 검색해서 데이터를 조회하는 경우.
커버링인덱스임.
db.employees.dropIndex({deptno:1, ename:1})
db.employees.createIndex({deptno:1, ename:1})
db.employees.find({deptno:10, ename:"CLARK"}, {_id:0, ename:1})
db.employees.find({deptno:10, ename:"CLARK"}, {_id:0, ename:1}).explain()
>> TTL 인덱스
- 일정시간이 지나면 삭제되는 인덱스, 권장하지 않음
db.employees.createIndex({hiredate:1},{expireAfterSeconds: 3600})
>> GeoSpatial 인덱스 ("2d")
- db.컬렉션.ensureIndex({필드명:"2d"})
db.tel_pos.save({mobile_no:"01012347777",
last_pos:[[127.0945116,37.5353970],
[126.9815316, 37.5685375],
[127.0305035, 37.5017141]
]})
db.tel_pos.save({mobile_no:"01012348888",
last_pos:[[127.1353452,37.4576521],
[127.1359081, 37.4512311],
[125.7823091, 36.3339801]
]})
db.tel_pos.save({mobile_no:"01012349999",
last_pos:[[126.3411234,36.1098761],
[124.3410922, 37.3409901],
[127.2223331, 37.0912090]
]})
db.tel_pos.ensureIndex({last_pos:"2d"})
db.tel_pos.find({last_pos:{$within :{$centerSphere: [[127.0352915,37.5360206], 30/3963]}}},
{_id:0, mobile_no:1, last_pos:1}
).pretty()
for(var i=0; i<100; i++) db.spatial.insert({pos:[i%10, Math.floor(i/10)]})
db.spatial.ensureIndex({pos:"2d"})
-- center를 중심으로 가장 가까운 좌표 조회
db.spatial.find({pos:{$near:[5,5]}}).limit(5)
-- center로부터 가장 가까운 원형좌표 조회
db.spatial.find({pos:{$within:{$center:[[5,5],2]}}},
{_id:0}
)
-- 해당좌표로부터 가장 가까운 Box형 좌표 조회
db.spatial.find({pos:{$within:{$box:[[5,5],[6,6]]}}}, {_id:0})
-- 다각형 조회
db.spatial.find({pos:{$within:{$polygon:[[3,3],[5,7],[7,4]]}}}, {_id:0})
>> GeoMetry 인덱스 ("2dsphere")
- 3가지 인덱스 타입이 있음
- Point, LineString, Polygon 타입
db.position.drop()
db.position.ensureIndex({loc:"2dsphere"})
db.position.insert({"_id":"m239092",
"data_type":NumberLong(1),
"loc" : {"type":"Point", "coordinates":[127.1058431, 37.5164113]},
"pos_name":["name=잠실역 2호선", "trans_type=지하철"]
})
db.position.insert({"_id":"m239091",
"data_type":NumberLong(1),
"loc" : {"type":"Point", "coordinates":[127.0980748, 37.5301218]},
"pos_name":["name=동서울터미널", "trans_type=버스터미널"]
})
db.position.insert({"_id":"m239090",
"data_type":NumberLong(1),
"loc" : {"type":"Point", "coordinates":[127.0952154, 37.5398467]},
"pos_name":["name=강변역 2호선", "trans_type=지하철"]
})
db.position.insert({"_id":"m239089",
"data_type":NumberLong(1),
"loc" : {"type":"Point", "coordinates":[127.0742172, 37.5419541]},
"pos_name":["name=건국대학역 2호선", "trans_type=지하철"]
})
db.position.find({loc:{$near :{$geometry:{type:"Point", coordinates:[127.1058431, 37.5164113]}, $maxDistance: 2000}}}).pretty()
-- 3km이내
db.position.find({loc:{$near :{$geometry:{type:"Point", coordinates:[127.1058431, 37.5164113]}, $maxDistance: 3000}}}).pretty()
db.position.insert( { "_id" : "m239093", "data_type" : NumberLong(1), "loc" : { "type" : "Point", "coordinates" : [127.0846600, 37.5120906] }, "pos_name" : [ "name=신천역 2호선", "trans_type=지하철" ] })
db.position.insert( { "_id" : "m239094", "data_type" : NumberLong(1), "loc" : { "type" : "Point", "coordinates" : [127.0740075, 37.5133497] }, "pos_name" : [ "name=종합운동장역 2호선", "trans_type=지하철" ] })
db.position.insert( { "_id" : "m239095", "data_type" : NumberLong(1), "loc" : { "type" : "Point", "coordinates" : [127.0847829, 37.5105344] }, "pos_name" : [ "name=삼성역 2호선", "trans_type=지하철" ] })
db.position.find({loc: {$geoIntersects:{$geometry: {type: "LineString",
coordinates:[[127.1058431, 37.5164113],
[127.0740075, 37.5133497],
[127.0847829, 37.5105344]
]}}}}).pretty()
db.position.insert( { "_id" : "m12901",
"loc" : { "type" : "Point",
"coordinates" : [127.126178, 37.5140978] },
"pos_name" : [ "add_name=체육대학교 수영장",
"add_type=Public Sport" ]
})
db.position.insert( { "_id" : "m12902",
"loc" : { "type" : "Point",
"coordinates" : [127.1224733, 37.5239739] },
"pos_name" : [ "add_name=올림픽 수영장",
"add_type=Resturant" ]
})
db.position.find({"loc":
{$geoWithin:
{$geometry:
{"type":"Polygon",
"coordinates":[[[127.1261076, 37.5191452],
[127.1220412, 37.5221428],
[127.1224733, 37.5239739],
[127.1269535, 37.5231093],
[127.1290333, 37.5179105],
[127.1239271, 37.5116750],
[127.1261076, 37.5191452]
]]
}
}
}
}).pretty()
- EOF -
- Total
- Today
- Yesterday
- JMW 헤어드라이기기
- yugabyteDB
- Life Chair
- 파나소닉 비데 DL-EH10KWS
- Sybase IQ
- 화분벌레
- Pixel Pals
- 르세라핌
- 톡토기
- 로니카 BCS
- 증권정보포털
- 솔리드 쿨론
- 코라나 19
- 매직 트랙패드2
- 남설 팔찌
- VARIDESK
- 루미큐브 종류
- 오미크론
- 배당급
- 유가바이트디비
- 별이 빚나는 밤
- GKRS
- 고체 향수
- 빈센트 반 고흐
- 카카오 에드
- 브리다 정수기
- 별잉 빛나는 밤
- 홈 오피스
- weka
- node.js
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |