매초마다 많은 양의 데이터를 반환하고 그리드에 표시되는 SP가 있습니다. 현재 대역폭을 줄이고 현재 그리드에 표시된 열만 반환하려고 생각하고 있습니다.CASE를 사용할 때 SQL 성능 문제가 발생했습니다.
SELECT
[Animals].[AnimalID] AS [AnimalID],
[Animals].[name] AS [AnimalName],
[Foods].[DisplayName] AS [Food],
[Animals].[Age] AS [AnimalAge],
[Animals].[AmountOfFood] AS [AmountOfFood]
내가 현재 노력하고있어 필드 (@fields)의 이름의 TVP를 전달하는 현재 :
이
물론 단순화 최소화하지만 내가 가진 기본적으로 무엇을 다음 SP이었다이다 그리드에 표시하고 같은에만 필요 필드를 반환 :SELECT
[Animals].[AnimalID] AS [AnimalID],
[Animals].[name] AS [AnimalName],
CASE
WHEN ('Food' in (select * from @fields))
THEN [Foods].[DisplayName]
END AS [Food],
CASE
WHEN ('AnimalAge' in (select * from @fields))
THEN [Animals].[Age]
END AS [AnimalAge],
CASE
WHEN ('AmountOfFood' in (select * from @fields))
THEN [Animals].[AmountOfFood]
END AS [AmountOfFood]
내가 직면하고있어 문제는 내 SP가 ~ 1 초를 복용 ~ 200 밀리 복용했다 (예상 할 수 있기 때문에)이다
어쩌면 우리를 죽이지 않을 정도로 이것을 다시 쓸 수있는 방법이 있습니까?
내 왕국에 대한 foreach!
대역폭 문제는 실제로 문제입니까? – Axarydax
세 가지 case 문을 사용하면 열을 반환하지 않고 저장하는 것보다 더 많은 실행 시간이 소요된다고 생각합니다. 단순히 모든 열을 반환하고 응용 프로그램보기에서 논리를 사용하여 열을 표시할지 결정하십시오. – paul
예제가 단순화되었다고 언급했듯이, 우리는 100 개의 필드에 가깝고 각각 수십 명의 사용자가 각각의 시간에 5-10 개 이상의 필드를보고 있지 않을 것입니다. 다른 방법이 없다면 모든 필드를 반환하거나 브로커를 사용하여 최상의 솔루션을 찾으십시오 :) –