결론부터 말씀드리면, limit()는 쿼리 실행 속도를 높여주지 않습니다. 대신 서버에서 클라이언트로 전송되는 데이터 양을 줄여 네트워크 대역폭 소비를 감소시키는 효과가 있습니다. 즉, limit()는 성능 최적화라기보다 불필요한 데이터 전송을 막는 도구라고 이해하는 것이 정확합니다.
그럼 실제 예제를 통해 limit()의 동작 방식을 살펴보겠습니다. 먼저 문서들을 포함하는 컬렉션을 생성합니다.
> db.demo197.insertOne({"Name":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3afde803d395bdc21346d8")
}
> db.demo197.insertOne({"Name":"Bob"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3afdef03d395bdc21346d9")
}
> db.demo197.insertOne({"Name":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3afdf203d395bdc21346da")
}
> db.demo197.insertOne({"Name":"Sam"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3afdf603d395bdc21346db")
}
> db.demo197.insertOne({"Name":"Mike"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3afdf903d395bdc21346dc")
}
> db.demo197.insertOne({"Name":"Carol"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3afe1603d395bdc21346dd")
}
> db.demo197.insertOne({"Name":"John"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3afe2003d395bdc21346de")
}find() 메서드로 전체 문서 조회하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo197.find();
위 쿼리를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
{ "_id" : ObjectId("5e3afde803d395bdc21346d8"), "Name" : "Chris" }
{ "_id" : ObjectId("5e3afdef03d395bdc21346d9"), "Name" : "Bob" }
{ "_id" : ObjectId("5e3afdf203d395bdc21346da"), "Name" : "David" }
{ "_id" : ObjectId("5e3afdf603d395bdc21346db"), "Name" : "Sam" }
{ "_id" : ObjectId("5e3afdf903d395bdc21346dc"), "Name" : "Mike" }
{ "_id" : ObjectId("5e3afe1603d395bdc21346dd"), "Name" : "Carol" }
{ "_id" : ObjectId("5e3afe2003d395bdc21346de"), "Name" : "John" }limit() 적용하기
이번에는 limit()를 함께 사용해 보겠습니다. 아래 쿼리는 검색 결과 중 처음 4개의 문서만 반환하도록 제한합니다.
> db.demo197.find().limit(4);
실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e3afde803d395bdc21346d8"), "Name" : "Chris" }
{ "_id" : ObjectId("5e3afdef03d395bdc21346d9"), "Name" : "Bob" }
{ "_id" : ObjectId("5e3afdf203d395bdc21346da"), "Name" : "David" }
{ "_id" : ObjectId("5e3afdf603d395bdc21346db"), "Name" : "Sam" }정리
위 예제에서 볼 수 있듯이 limit(4)를 적용하면 7개의 문서 중 앞의 4개만 반환됩니다. 하지만 이는 쿼리 자체의 처리 속도가 빨라진 것이 아니라, 클라이언트에 전달되는 결과 집합의 크기가 줄어든 것일 뿐입니다. 따라서 대용량 컬렉션에서 쿼리 성능을 개선하려면 인덱스 생성, 적절한 쿼리 조건 설계 등의 방법을 함께 고려하는 것이 좋습니다.