2013-05-29 3 views
0

여러 선택과 단일 선택을 사용하는 것의 차이가 성능에 어떤 영향을 미치는지 궁금합니다. 나는 누군가가 그것을 한 것을 보았고, 나는 아래처럼 손이 닿지 않는 것을 느낀다.다중 선택 대 단일 선택 설명

select @a = cBranchName from mstores where nBranchCode = 1 
select @b = cBranchAddress from mstores where nBranchCode = 1 
select @c = dCreateDate from mstores where nBranchCode = 1 
select @d = AssignedCompanyId from mstores where nBranchCode = 1 
select @e = StoreFormat from mstores where nBranchCode = 1 

select @a = cBranchName 
    ,@b = cBranchAddress 
    ,@c = dCreateDate 
    ,@d = AssignedCompanyId 
    ,@e = StoreFormat from mstores where nBranchCode = 1 

나는 또한 오, 나는 하나의 선택 문이 5 SELECT 문보다 빠르다는 것을 증명 할 수있는 방법,의 데이터베이스에 5 여행을 선택하는 것이 가정

비록 그것을 보았을지라도, 나는 이미 단일 select 문이 다중 선택보다 훨씬 빠르다고 생각했습니다. 하나 개의 테이블에 대한

+1

책을 다섯 번 더 빨리 읽거나 한 번 책을 읽는 것이 더 빠릅니까? – SenthilPrabhu

+0

@SenthilPrabhu : 그렇게 간단한 것은 아닙니다.데이터베이스는 자주 쿼리를 최적화하지만이 경우에는 그렇지 않다고 가정합니다. –

+0

@ TimSchmelter : 데이터베이스는 질의를 최적화해야합니다. 최소한 초 단위의 시간이 걸립니다. – SenthilPrabhu

답변

0

i는 숫자 1 선택 #을해야 선택 하나의 생각, 당신은 상황에 따라 그렇다하더라도 여러 테이블을 처리 할 때 하나의 문이

내가 하나의 문장을 생각 다중 select 문 더 나은 다음에 가입 데이터베이스가 스캔 할 필요가있는 모든 테이블을 볼 수 있기 때문에 데이터베이스가 많은 최적화 작업을 수행 할 수 있으므로 오버 헤드가 줄어들고 결과 집합을 로컬로 구축 할 수 있습니다. 또한 다음 프로그래머가 단일 문을 사용하는 것이 일반적으로 더 쉬울 것입니다. 이해하고 수정하는 것

0

가장 쉬운 방법은 단일 테이블에서 하나의 선택이 5보다 저렴할 것으로 기대하지만 그것을 증명하기 위해 테스트하는 것입니다. 여러 탭 레퍼런스가 필요하다면 개별 선택을하는 것이 더 저렴할 수있다. 미리 '계획을 세우다'를 사용하여 미리 결정해야한다. (때로 조인은 단일 테이블을 선택하는 곳에서 인덱스를 사용할 수 없다. 의지).

http://msdn.microsoft.com/en-us/library/ms190287.aspx

SET STATISTICS TIME ON; 
GO 
SELECT ProductID, StartDate, EndDate, StandardCost 
FROM Production.ProductCostHistory 
WHERE StandardCost < 500.00; 
GO 
SET STATISTICS TIME OFF; 
GO 

결과 :

SQL Server parse and compile time: 
CPU time = 0 ms, elapsed time = 1 ms. 

(269 row(s) affected) 

SQL Server Execution Times: 
CPU time = 0 ms, elapsed time = 2 ms. 
SQL Server parse and compile time: 
CPU time = 0 ms, elapsed time = 1 ms. 
1

나는 두 방법 사이에 상당한 차이를 볼 기대하지 않을 것이다. 첫 번째 SELECT가 메소드 # 1에서 실행 된 후 데이터베이스 엔진이 다른 4 개의 SELECT에 대해 재사용 할 수있는 실행 계획이 존재합니다. 그리고 : 페이지가 그 시점에서 캐시 될 수 있으므로 디스크로 돌아갈 필요가 없습니다. 방법 2는 2 카운트에서 더 바람직합니다. 그것은 논쟁의 여지가 있지만 우아합니다. 두 번째로 단일 명령이므로 행이 실행되는 동안 잠길 수 있습니다. 방법 # 1에서이 행이 각 SELECT

+0

쓰레기. 물론 차이가 있습니다. 페이지가 캐시 된 경우에도 왕복이 있습니다. 행은 실행 중에 잠기지 않지만 명령문 사이를 변경할 가능성을 언급하므로 해당 명령문도 중단됩니다. – LoztInSpace

+0

공유 읽기 잠금이 존재합니다. 나는 중요한 차이를 볼 것으로 기대하지 않을 것이라고 말했다. 따라서 물론 그렇다. 차이점이있다. –

1

주요 차이점 사이에 변경됩니다 가능 :

  1. 다섯 왕복보다는 하나. 빛/전기의 속도가이 것을 처리합니다.
  2. 5 개의 문장을 분석하고 분석하고 실행해야합니다. 당신은 더 빨리 될 것이라고 생각합니까?
  3. 일관성 - 선택 항목간에 업데이트가 발생하면 어떻게됩니까?
  4. 할 수 있습니다 매우 명확하게 볼 당신이 사람이 이제까지 5 개 쿼리가 1보다 더 좋을 거라 생각하는 원인이 왜 내가 꽤 손실에있어

가 이해할 수있는 실행 계획을 보여 주면에가는 일 .