저는 일반적으로 SQL 쿼리에 Entity Framework를 사용합니다. 이는 강력하게 형식화되고 유지 보수가 가능한 방식으로 동적으로 쿼리를 구성 할 수있게 해줍니다.
그러나 지금은 공간 쿼리를 사용하는 프로젝트를 진행하고 있습니다. 대부분의 쿼리는 주어진 좌표에서 시간 또는 거리에 따라 결과 집합을 출력합니다. 그러나 STDistance에 의한 정렬은 쿼리가 10 배 느려지는 것을 발견했습니다. (실제로는 "주문자"이외에 다른 테이블에 가입하면 속도가 느려집니다).NET의 SQL 쿼리
직접 쿼리를 최적화 할 수 있었지만 성능을 다시 가져올 수는 있지만이 쿼리를 생성 할 수는 없습니다 Entity Framework에서.
그래서 나는 EF에서 생성 된 "시간별 주문"쿼리 세트와 SQL 서버의 저장 프로 시저로 "거리 별 주문"쿼리 세트를 갖게 될 수도 있습니다. 문제는 기본적으로 후자의 쿼리 집합이 문자열 연결 (SP 또는 C# 중 하나)을 통해 만들어야한다는 것입니다.
나는 몇 년 동안 SQL 문자열 연결에서 벗어나려고 노력해 왔으며 이러한 ORM 프레임 워크는 99 %의 쿼리에 유용하지만 나는 항상 최적의 쿼리를 얻기 위해 문자열 concanenation으로 되돌아 가야한다. 서버로 보냈습니다. 이것은 유지 보수의 악몽이다.
문자열 연결은 템플릿 엔진을 사용하여 ASP.NET에서 해결되었으므로 기본적으로 html 문자열을 만들 수 있습니다. 누구든지 SQL 문자열에 대한 그런 해결책을 알고 있습니까? 어떤면에서는 다소 지저분하지만 최적의 쿼리를 허용합니다. 내 관점에서이보다 더 잘
- 문자열 CONCAT가 저장된 프로 시저에있을 것입니다
- C#에서 문자열 CONCAT 가능한 모든 입력을 포함하는 저장 발동에 중복 된 코드의
- 대중을 만들 수 있습니다
- LINQ 쿼리 매개 변수 sub-optimal SQL
나는이 일반적인 문제에 대한 귀하의 생각과 내가 제안한 해결책에 대해 어떻게 생각하는지 알고 싶습니다.
감사합니다 Kris
, LINQ는 성능 설계되었습니다 매우 많은 것을 염두에 두십시오. 쿼리 최적화가 완료되었으며 LINQ에서 사용할 수 있습니다. 내가 붙어있을거야. 오더 비. – SkonJeet
그러나 LINQ-to-Entities 결과를 사용하면 최적화 된 SQL 쿼리보다 10 배 느린 쿼리가 생성됩니다. (170ms가 아닌> 1.2 초) – krisdyson