복붙노트

[SQL] 데이터베이스 커서를 사용의 이점은 무엇입니까?

SQL

데이터베이스 커서를 사용의 이점은 무엇입니까?

그것은 내가 직면 한 인터뷰 질문을 기반으로합니다.

매우 짧은 정의 할 수 있습니다

커서의 사용 외에도 (포인트는 여기에 MSDN에 나와 있습니다), 내 마음에 질문이 그 우리는 쿼리 또는 저장 프로 시저를 (사용하여 모든 작업을 수행 할 수있는 경우에 우리가 거래-SQL을 사용할 수 있습니다처럼 내가 잘못 아니에요 경우 MS-SQL)을 위해, 우리는 커서를 사용해야 어떤 구체적인 점은 무엇입니까?

해결법

  1. ==============================

    1.큰 결과 집합에 비해 커서를 사용하여 비디오 스트리밍 대신 하나의 급습에 비디오를 다운로드를 사용하고,이 다운로드 할 때 보는 것과 같다. 다운로드하면 다운로드가 완료 될 때까지 기다려야 공간과 인내의 몇 기가 있어야합니다. 이제 상관없이 컴퓨터 나 네트워크가있을 수 있습니다 얼마나 빨리, 모두가 같은 속도로 영화를 시청하지 않습니다.

    큰 결과 집합에 비해 커서를 사용하여 비디오 스트리밍 대신 하나의 급습에 비디오를 다운로드를 사용하고,이 다운로드 할 때 보는 것과 같다. 다운로드하면 다운로드가 완료 될 때까지 기다려야 공간과 인내의 몇 기가 있어야합니다. 이제 상관없이 컴퓨터 나 네트워크가있을 수 있습니다 얼마나 빨리, 모두가 같은 속도로 영화를 시청하지 않습니다.

    일반적으로 어떤 쿼리가 서버로 전송 실행하고 결과 집합 활동의 하나의 버스트에, 당신에게 네트워크를 통해 전송됩니다. 커서가 당신에게 행으로 데이터 행에 대한 액세스 권한을 부여하고 당신이 그것을 (실제로 그것을 볼 수 있습니다) 요청에만 모든 행을 스트리밍 할 것입니다.

    어떤 그러나, 몇 가지주의로 우리를 제공합니다 :

    엄지 손가락의 규칙 :

    "연속 성격"수단은 무거운 그룹에는 집계 함수는 쿼리에서 BY 절 없다. 서버는 느리게 커서가 캐시에서 소비 및 기타 물건의 한편을 수행하는 10 개 행을 계산하는 결정할 수 있습니다.

    HTH

  2. ==============================

    2.커서가 한 세트의 레코드를 반복 할 수있는 도구입니다. 그것은 질서와 현재 레코드의 개념을 가지고있다.

    커서가 한 세트의 레코드를 반복 할 수있는 도구입니다. 그것은 질서와 현재 레코드의 개념을 가지고있다.

    일반적으로, SQL은 멀티 세트와 함께 작동 :이 전체적으로 촬영없이 주어진 순서대로 가능한 반복 기록의 집합입니다.

    말,이 쿼리 :

    SELECT  *
    FROM    a
    JOIN    b
    ON      b.a = a.id
    

    , 멀티 세트 A와 B에 동작한다.

    이 쿼리의 어떠한 내용은 액세스해야하는 순서대로 그들이이 저장되는 방법 기록의 순서에 대한 가정, 등을하지 않습니다

    이 추상 멀리 구현 세부 사항을 허용하고 시스템이이 쿼리를 실행하기위한 최적의 알고리즘을 선택 해보자.

    모든 데이터를 변환 한 후에 그러나, 궁극적으로는 주문 방법과 하나 하나의 레코드에 액세스해야합니다.

    당신은 전화 번호부의 항목이 하드 드라이브에 저장하는 방법을 정확하게 걱정하지 않지만, 프린터는 알파벳 순서로 공급 될하도록 요구하지 않습니다; 그리고 포맷 태그는 개별적으로 각 레코드에 적용되어야한다.

    커서가 활동하기 시작하는 곳은 정확히. 클라이언트 측에서 결과 집합을 처리 할 때마다, 당신은 커서를 사용하고 있습니다. 당신은 서버에서 정렬되지 않은 메가 바이트의 데이터를 얻을 수없는이 같은 결과 집합 기술자, 그냥 쓰기 무언가 : 당신은 단지 작은 변수를 얻을 :

    while (!rs.EOF) {
       process(rs);
       rs.moveNext();
    }
    

    의 커서 그건 당신에 대한 구현이 모든 것을.

    물론 이것은 데이터베이스 클라이언트의 상호 작용에 관한 것이다.

    데이터베이스 자체에 관해서는 : 나는 거의 모든 데이터 변환이보다 효율적으로 설정 작업을 사용하여 구현 될 수있다, 위에서 말한대로 데이터베이스 내에서, 당신은 거의 때문에, 커서를 필요가 없습니다.

    하지만 예외가 있습니다 :

    또한이 문서의 가치가 독서를 찾을 수 있습니다 :

  3. ==============================

    3.이 데이터 세트를 통해 순차적으로 판독 할 수있다 서를 사용하여 프로그래밍, 그래서 종래의 파일 액세스와 유사한 방식으로,보다 SQL 세트 기반의 동작 특성으로 동작.

    이 데이터 세트를 통해 순차적으로 판독 할 수있다 서를 사용하여 프로그래밍, 그래서 종래의 파일 액세스와 유사한 방식으로,보다 SQL 세트 기반의 동작 특성으로 동작.

    이 사용 될 수있는 상황의 몇 가지 있습니다 :

    http://en.wikipedia.org/wiki/Database_cursor : 필연적으로, 위키 피 디아 더있다

  4. ==============================

    4.커서를 한 번에 하나의 행에 액세스 할 수 있습니다. 그래서 당신이 주어진 시간에 행의 많은하지만 하나를 조작 할 때 사용하는 것이 좋다.

    커서를 한 번에 하나의 행에 액세스 할 수 있습니다. 그래서 당신이 주어진 시간에 행의 많은하지만 하나를 조작 할 때 사용하는 것이 좋다.

    당신은 단지 그것을 통해 다음 루프를 모음에 모든 행을 얻을 수 없도록 - 나는 내 수업에 들었다 사용 커서에 대한 이유는 당신이 당신의 기억을 할 수있는 것보다 더 많은 행을 액세스 할 수 있습니다.

  5. ==============================

    5.때로는 집합 기반 논리는 매우 복잡하고 불투명 얻을 수 있습니다. 이러한 경우 및 성능이 아닌 서버 쪽 커서는 더 관리하고 친숙한와 관계 논리를 대체 할 수있는 문제가되는 경우 쉽게 유지 보수의 결과로 프로 시저 로직 (비 관계형 사상가로).

    때로는 집합 기반 논리는 매우 복잡하고 불투명 얻을 수 있습니다. 이러한 경우 및 성능이 아닌 서버 쪽 커서는 더 관리하고 친숙한와 관계 논리를 대체 할 수있는 문제가되는 경우 쉽게 유지 보수의 결과로 프로 시저 로직 (비 관계형 사상가로).

  6. from https://stackoverflow.com/questions/3861558/what-are-the-benefits-of-using-database-cursor by cc-by-sa and MIT license