9

SQL 성능에 linq에 대한 많은 기사를 읽었습니다. 내가 얻은 결과는 일반적인 접근 방식 (DAL 또는 Microsoft Enterprise 라이브러리)보다 느리다는 것입니다.성능 튜닝 후에도 읽기 및 쓰기 작업 모두가 느려짐ObjectTracking 및 기타 트릭을 비활성화하십시오. 빠른 개발, 깨끗한 코드 등의 발음이 있지만 성능은 어떻습니까?

내가 읽기 작업에만 사용한다면 어떨까요?

제안을 해주십시오.


  • +1 나는 LINQ가 전체적으로 SQL이라고 생각하지는 않지만 그 대신에 너무 깊고 잘못하기 쉽습니다. 루프에서 컬렉션 속성을 잘못 사용하면 큰 성능 문제가 빨리 발생할 수 있습니다. - Tj Kellie

3 답변


8

stackoverflow ;-p에 대해 충분히 잘 작동하는 것 같습니다. 특히 사용하는 경우컴파일 된 쿼리, 적절한 DB 디자인과 비교하고 (예를 들어) 적절한 열 / 행을 가져 오는 것과 n + 1 로딩을 피하는 것과 같은 병목 현상이 발생하지는 않습니다.


  • @Gravel & & @Byers. 하나의 질문. 세 개의 서버가 있다고 가정 해보십시오. 1은 읽기, 1은 쓰기, 다른 하나는 복제 서버입니다. 그래서 만약 내가 linq 읽기 작업 및 쓰기 작업을 내가 손으로 쿼리를 사용합니다. 이것이 최고의 솔루션입니까? 또는 다른 최상의 솔루션이 있습니다. 당신이 제안하는 것 - Adeel
  • @Adeel - db 서버 또는 앱 서버? db 서버를 사용하는 것처럼 들리지만,특유한사용 된 데이터 액세스 API는 다른 db 설정과 비교하여 큰 차이를 만들 것입니다. - Marc Gravell
  • 당신은 항상 읽기를 위해 SP / UDF를 사용할 수 있습니다 (L2S를 통해) ... - Marc Gravell
  • @Gravel Server는 데이터베이스 서버를 의미합니다. Linq 방식은 데이터 액세스 API에 비해 쓰기 작업이 매우 느리고 읽기는 성능 오버 헤드가 거의 없습니다. 그래서 그것은 단지 READ 목적으로 linq를 사용하는 것이 더 낫다. - Adeel
  • @Adeel - 확실히 그렇습니다....보다 나은쓰기보다는 읽기; 그것은 실제로 시나리오에 의존합니다. 대부분의 코드는 대량의 DML을 발행하지 않습니다. 만약 너라면해야 할 것이 경우 명령 일괄 처리가 바람직하지만 일괄 적으로 DB (예 : xml 또는 SqlBulkCopy 또는 SQL 2008 테이블 반환 매개 변수)로 데이터를 실행하는 것을 고려해 볼 수도 있으며 집합 기반 업데이트 / 삽입을 사용하여 처리 할 수 있습니다 db. L2S를 통해 이들 중 첫 번째 만 사용할 수 있습니다. - Marc Gravell

4

읽기 작업의 경우 LINQ To SQL은 SQL을 직접 작성하는 것만 큼 빨라야합니다. SQL 작성의 오버 헤드는 눈에 띄지 않아야합니다. 수작업으로 쿼리를 작성한 것처럼 최적으로 처리되지 않는 쿼리가있을 수 있지만 대부분의 경우 내 경험에 비추어 볼 때 매우 좋습니다.

대량 업데이트의 경우 LINQ To SQL은 한 번에 하나씩 행을 처리하기 때문에 일반적으로 속도가 느립니다. 너는 뭔가를 할 수 없다.UPDATE Foo SET x = 0 WHERE id BETWEEN 100 AND 200모든 행을 가져 오지 않고 LINQ to SQL에서. 현재이 유형의 조작을 위해 SQL을 직접 작성하는 것이 가장 좋습니다.


3

업데이트 및 삭제는 영향을받는 각 개체에 대해 별도의 문이 생성되므로 LINQ to SQL이 현재 문제가되는 부분입니다.

즉,이 블로그 게시물은 성능을 향상시키는 데 도움이되는 두 가지 작업을 모두 하나의 명령문으로 처리하는 방법을 자세히 설명합니다.LINQ to SQL을 통한 일괄 업데이트 및 삭제.

컴파일 된 쿼리는 자주 사용되는 쿼리, 특히 매개 변수를 사용하여 특정 결과를 얻는 쿼리에도 유용합니다. 이 게시물이 도움이 될 수도 있습니다.LINQ to SQL 응용 프로그램 성능 향상을위한 10 가지 팁.

연결된 질문


관련된 질문

최근 질문