2010-06-10 5 views
1

100 개의 레코드가있는 테이블 X가 있다고 가정하면 select * from X을 실행하면 100 초가 걸립니다.데이터베이스 페이징에서 어떤 성능 향상을 기대할 수 있습니까?

쿼리 select top 10 * from X의 예상 소요 시간은 어느 정도입니까?

나는 관계가 다소 선형 적이기 때문에 10 초가 걸릴 것으로 기대한다. 이것이 맞습니까, 아니면 어떤면에서 관계가 비선형입니까?

가 이
    이 쿼리는 결과를 종종

을 반환하는 데 걸리는 시간

  • 을 수행하는 데 걸리는 시간
  • , 쿼리가 될 것입니다 :

  • +0

    두 번째 쿼리에서 'top'을 원하는 rdbms의 페이징 구문으로 대체하십시오. 난 단지 "일반적으로"대답을 찾고 있어요 – StevenWilkins

    답변

    0

    귀하의 성능 비용은 두 개의 서로 다른 영역에 빠르지 만 결과를 반환하는 것은 I/O 바인딩이므로 느립니다. 이 경우 적은 수의 결과 만 반환하여 선형 속도 향상을 볼 수 있습니다.

    그러나 쿼리 자체가 복잡하면 상황이 달라집니다. select * from X이 아니라 select * from X where [complicated-expression] 인 경우 결과는 데이터베이스 구현에 따라 크게 다를 수 있습니다. 이 경우 실적이 쿼리 복잡성에 의해 좌우 될 수 있으며이 경우 더 적은 수의 결과 만 반환하면 많은 이점을 얻을 수 없습니다.

    +0

    그리고 물론, 당신은 절대로 select *를 사용하고 싶지 않습니다. 성능 개선을 위해 필요한 항목을 제외한 모든 항목을 반환하지 마십시오. 참여한 항목이 있으면 필요없는 항목이 항상 있습니다. 유지 보수를 위해 select *를 사용하지 마십시오. 데이터베이스가 변경 될 때 중단 될 수 있습니다. 예를 들어, UNION 쿼리에서 select *를 사용하고 추가 분기가 추가 된 테이블이 유니온 분기 중 하나에서만 있다고 가정합니다. 사용자에게 데이터를 표시하고 사용자에게 보이지 않게하는 열이 추가되었다고 가정 해보십시오. – HLGEM

    +0

    공정하고 충분히 감사합니다. @HLGEM 좋은 팁. – StevenWilkins

    관련 문제