none
MS SQL 2008 Server R2 Standard 에 콜렉션속도향상에 대한 질문입니다. RRS feed

  • 질문

  • 안녕하세요.

    MS SQL 2008 R2 STD 를 사용을 하는 분들이 계시는데요.

    쿼리 작업전에 콜렉션이라는 부분에서 속도가 매우느리다고 하여, 버벅거림이나, 속도를 향상시키는 방법에대해 알고 싶어서 질문을 드립니다.

    확인부탁드리며, 대응 방안을 알려주시면 감사드리겠습니다.

    감사합니다.

    수고하십시오.

    2013년 12월 19일 목요일 오전 5:51

답변

  • 네, 정홍주MVP님 말씀처럼 구체적인 질문이면 좋을것 같습니다.

    Entity Framework는 메모리 내 컬렉션에 대해 IEnumerable<T>.Contains<T>(T value)를 호출하는 쿼리를 캐시하지 않습니다. 이러한 컬렉션의 값은 휘발성으로 고려됩니다. 다음 예제 쿼리는 캐시되지 않으며 항상 계획 컴파일러에서 처리됩니다.

    int[] ids = new int[10000];
    ...
    using (var context = new MyContext())
    {
        var query = context.MyEntities
                        .Where(entity => ids.Contains(entity.Id));

        var results = query.ToList();
        ...
    }

    또한 Contains가 실행되는 IEnumerable의 크기에 따라 쿼리의 컴파일 속도가 결정됩니다. 위 예에 표시된 것과 같은 큰 컬렉션을 사용할 때는 성능이 크게 저하될 수 있습니다.

    [출처]

    Entity Framework 5 성능 고려 사항

    2013년 12월 23일 월요일 오전 8:45
    중재자

모든 응답

  • 어떤 작업을 하시는것인지 좀 더 구체적으로 질문을 하시면 다른 사람이 답을 다는데 도움이 됩니다.

    쿼리 작업 전에 콜렉션이 어떤 것인지요?


    Hong-ju

    2013년 12월 21일 토요일 오후 8:45
  • 네, 정홍주MVP님 말씀처럼 구체적인 질문이면 좋을것 같습니다.

    Entity Framework는 메모리 내 컬렉션에 대해 IEnumerable<T>.Contains<T>(T value)를 호출하는 쿼리를 캐시하지 않습니다. 이러한 컬렉션의 값은 휘발성으로 고려됩니다. 다음 예제 쿼리는 캐시되지 않으며 항상 계획 컴파일러에서 처리됩니다.

    int[] ids = new int[10000];
    ...
    using (var context = new MyContext())
    {
        var query = context.MyEntities
                        .Where(entity => ids.Contains(entity.Id));

        var results = query.ToList();
        ...
    }

    또한 Contains가 실행되는 IEnumerable의 크기에 따라 쿼리의 컴파일 속도가 결정됩니다. 위 예에 표시된 것과 같은 큰 컬렉션을 사용할 때는 성능이 크게 저하될 수 있습니다.

    [출처]

    Entity Framework 5 성능 고려 사항

    2013년 12월 23일 월요일 오전 8:45
    중재자