커서를 재사용하는 것과 새로운 커서 만들기의 상충 관계는 무엇입니까?

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

문제

CX_ORACLE (또는 일반적으로 Oracle)에서 각 쿼리에 커서를 할당하거나 여러 쿼리에서 커서를 재사용 할 수 있습니다.

def getSomeData(curs):         # case 1: pass in a cursor, which is generally
    curs.execute('select ...') #         reused across queries
    return curs.fetchall()

def getSomeData(conn):         # case 2: pass in a connection,allocate
    curs=conn.cursor()         #         a cursor for this query
    curs.execute('select ...')
    return curs.fetchall()

물론 두 접근 방식은 동일한 데이터를 반환합니다.

두 접근 방식 사이의 상충 관계는 무엇입니까? 특히 효율적입니까? 많은 쿼리에서 커서를 재사용 할 수있는 잠재적 인 함정이 있습니까?

도움이 되었습니까?

해결책

CX_ORACLE 커서를 원하는만큼 문제없이 재사용 할 수 있습니다. 작은 시간에 수천 개의 작은 쿼리를 실행하고 있다면 ~할 것 같다 커서를 재사용하여 약간의 성능 향상을 보지만 의심합니다.

나는 때때로 새로운 커서를 만들 것이며, 다른 시간에는 코드를 쉽게 읽고 이해할 수 있는지 여부에 따라 기존 커서를 재사용합니다.

예를 들어, 데이터베이스에 액세스 해야하는 다양한 절차가있는 경우 Oracle Connection 객체를 전달하거나 해당 연결에 생성 된 커서를 전달할 수 있습니다.

코드가 더 읽기 쉽고 유지 관리하기 쉽게 만드는 것은 내가 원하는 것입니다.

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