모든,
따라서 LINQ-to-SQL의 모든 선택 쿼리를 CompiledQueries를 사용하여 변환하여 처리 속도를 높였습니다. 지금까지는 select 문에서 훌륭하게 작동하지만 삽입, 업데이트 또는 삭제 문을 미리 컴파일하는 방법을 알지 못했습니다.
LINQ-to-SQL으로 삽입, 삭제 또는 업데이트 할 때 개체 모델을 사용해야합니다. 하지만 분명히 어딘가에 따라 쿼리를 생성합니다. 미리 컴파일하고 정적 멤버에 저장하는 것이 좋습니다.
이것이 가능한가? 미리 컴파일되지 않았을 때 업데이트, 삭제 및 삽입과 같은 LINQ 성능은 무엇입니까? 나는 그들이 선택하는 것보다 훨씬 더 빠르다는 것을 알았다. 왜냐하면 그들이하는 일은 훨씬 간단하고 덜 동적 인 것이기 때문이다.
큰 차이가 있습니다. Linq-To-SQL 선택 쿼리는 대규모 복합 표현 트리가 될 수 있습니다. 언젠가 '편집'할 수있는 이것들. 이 경우 SQL Server에 대해 실행할 수있는 일부 T-SQL에 병합합니다. 따라서 연산의 결과를 캐시하여 재사용 할 수 있습니다.
그러나 다른 삭제, 업데이트 및 삽입은 식 트리가 T-SQL로 변환되지 않아도되는 간단한 작업입니다 (LINQ 자체는 모두 쿼리에 관한 것입니다). 우리가 이러한 다른 작업을 '쿼리'로 수행하는 SQL 코드에 대해 숙련 된 인력이라면 유감스럽게도 정보를 요구하지 않습니다.
이러한 작업은 LINQ가 아닌 DataContext에 의해서만 정의되므로 이러한 기능을 수행하는 코드는 이미 컴파일되어 있습니다.
3 가지 삽입만으로도 컴파일과 재사용이 가능하다는 생각이 들었습니다. 삭제가 간단하기 때문에 (테이블에서 키 삭제 ...) 업데이트는 변경된 필드를 업데이트하기 때문에 업데이트 작업마다 다릅니다.
[amien
L2S는 "sp_executeSQL"을 사용하므로 처음 실행하면 저장된 프로 시저 실행 계획 캐시에 저장됩니다. 후속 실행 (같은 쿼리의 - 동일한 매개 변수가 아님)은 캐시에서 컴파일 된 계획을 다시 사용합니다. 따라서 사용자가 궁금해하는 것은 SQL Server에서 '배후에서'자동으로 처리됩니다.