SQL 문을 사용하기에 적절한 시간은 언제입니까?“[Tables]에서 [tables]에서 [conestment]를 선택하여 [조건]을 먼저 가져 오기 [n] 행 만 가져옵니다.

StackOverflow https://stackoverflow.com/questions/400575

  •  03-07-2019
  •  | 
  •  

문제

특정 수의 행만 선택하는 것이 단순히 더 구체적인 선택 문을 만드는 것보다 낫습니다. 나는 내가 꽤 똑바로 놓친 느낌이 들지만 나는 그것을 알아낼 수 없다. 나는 SQL에 대한 6 개월 이내에 경험이 있고 그에 대한 경쟁이 있었기 때문에 이것이 정말 간단한 질문이라면 죄송합니다. 그러나 명확한 대답을 찾을 수 없었습니다.

도움이 되었습니까?

해결책

나는 두 가지 일반적인 용도를 알고 있습니다.

페이징 : 주문을 지정하십시오. 주문이 지정되지 않은 경우 많은 DB 구현은 쿼리를 실행하는 데 편리한 것을 사용합니다. 이 "최적의"주문 행동은 매우 예측할 수없는 결과를 줄 수 있습니다.

SELECT top 10 CustomerName
FROM Customer
WHERE CustomerID > 200 --start of page
ORDER BY CustomerID

하위 쿼리 : 하위 쿼리를 발행 할 수있는 많은 장소에서는 결과가 단일 값이어야합니다. Top 1은 많은 경우 Max보다 빠릅니다.

--give me some customer that ordered today
SELECT CustomerName
FROM Customer
WHERE CustomerID =
(
  SELECT top 1 CustomerID
  FROM Orders
  WHERE OrderDate = @Today
)

다른 팁

사용자 정의 페이징, 일반적으로.

우리는 다음과 같은 이유로 진술을 사용하고 있습니다.

  1. DB에서 클라이언트로 모든 행을 전송할 필요없이 가장 관련성이 높은 결과 (상위 100 위) 만 표시하십시오. 이 경우 주문도 사용합니다.

  2. 우리는 단지 행이 일치하는지 알고 싶고 몇 가지 예제가 있습니다. 이 경우, 우리는 결과를 주문하지 않으며 다시 Fetch First는 DB가 많은 행을 전송하기 위해 준비한 다음 클라이언트에게 버리는 것보다 훨씬 저렴합니다. 이것은 일반적으로 특정 SQL이 옳은 경우 느낌을 얻을 필요가있는 소프트웨어 개발 중입니다.

사용자에게 값을 표시하려면 N 행만 필요할 수 있습니다. 일반적으로 데이터베이스 서버는 모든 행을 모든 행을 가져올 수있는 것보다 빠르게 첫 번째 N 행을 가져올 수 있으므로 화면 Redraw가 조금 더 빨리 갈 수 있습니다.

Oracle은 심지어 First_rows라는 힌트를 가지고있어 데이터를 빠르게 되 찾는 것이 효율적으로 되돌리는 것이 더 중요합니다.

SQL의 디자이너는 귀하와 동의합니다. 따라서 Standard SQL이 상단/한계/Fetch를 먼저 포함시키지 않는 이유입니다.

Google 검색 결과와 일반적으로 결과를위한 페이지 수를 생각해보십시오.

분명히, 그들의 경우에는 훨씬 더 많은 것이 있지만 그것이 그 아이디어입니다.

페이징 외에도 테이블에서 가장 또는 최소한 [메트릭 삽입] 행을 원할 때마다 [Metric]을 주문하고 1 행으로 제한하는 것은 Min/Max를 사용하여 하위 쿼리를 수행하는 것보다 낫습니다. 엔진마다 다를 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top