나는 모든 오랫동안 잘 실행이 (의사 코드) 같은 것을 간다 저장 프로 시저SQL Server 이외의 데이터베이스 엔진이 이런 식으로 동작합니까?
storedprocedure param1, param2, param3, param4
begin
if (param4 = 'Y')
begin
select * from SOME_VIEW order by somecolumn
end
else if (param1 is null)
begin
select * from SOME_VIEW
where (param2 is null or param2 = SOME_VIEW.Somecolumn2)
and (param3 is null or param3 = SOME_VIEW.SomeColumn3)
order by somecolumn
end
else
select somethingcompletelydifferent
end
있습니다. Param4가 'Y'이면 갑자기 쿼리가 계속 실행되기 시작했습니다. 코드를 다음으로 변경하십시오.
storedprocedure param1, param2, param3, param4
begin
if (param4 = 'Y')
begin
set param2 = null
set param3 = null
end
if (param1 is null)
begin
select * from SOME_VIEW
where (param2 is null or param2 = SOME_VIEW.Somecolumn2)
and (param3 is null or param3 = SOME_VIEW.SomeColumn3)
order by somecolumn
end
else
select somethingcompletelydifferent
그리고 예상되는 매개 변수 내에서 다시 실행됩니다 (40,000+ 레코드의 경우 15 초 정도). 이것은 내 질문의 요점은 SQL Server에 대한 특정이 특정 "기능", 또는이의 RDBMS 사이에서 일반적인 기능 '입니다 2005 SQL 서버 함께 일반적으로 그 : 이년 단지에 대해 잘 실행
- 쿼리 데이터가 커짐에 따라 작업을 중단하십시오.
- "새로운"실행 계획은 논리적으로 동일한 대안이 잘 실행 되더라도 데이터베이스 서버가 쿼리를 실행하는 기능을 파괴합니까?
이것은 SQL Server에 대한 호언 장담처럼 보일 수도 있지만 어느 정도는 그렇다고 생각하지만 다른 사람들이 Oracle, DB2 또는 다른 RDBMS에서 이런 종류의 현실을 경험하는지 실제로 알고 싶습니다. 다른 사람들과 약간의 경험을 쌓았지만 SQL Server에서는 이러한 종류의 복잡성과 복잡성 만 보았 기 때문에 복잡한 데이터베이스가있는 다른 사람들이 다른 제품과 비슷한 경험을 갖고 있는지 궁금합니다.
"all"데이터베이스에 문제가 생길 수 있습니다. 즉, 실행 계획은 데이터 증가/통계가 오래되었거나 dbms가 모든 데이터/문제를 처리하는 데 어려움이 있으므로 원숭이가 될 수 있습니다. – nos
포인터를 보내 주셔서 감사합니다. 그러나이 경우에는 매개 변수가없는 직선 선택보다 성능이 뛰어나며 dynamicSQL 자체 문제가있을 수 있습니다. 그래서 우리는 사례별로 그것을 취합니다. – Yishai