MSSQL - Openquery 사용 방법 / 연결된 서버와 오픈쿼리 차이점 / Linked Server의 쿼리 실행 속도 상승 시키기

반응형

연결된 서버(Linked Server) 관련 글 보기

[ 연결된 서버 사용 방법] 

 

[ 연결된 서버에서 오픈 쿼리 사용 방법 ]

 

[ 다른 RDBMS를 연결된 서버로 연결하기 ]

 

[ 연결된 서버로 프로시저 실행하기 ]


 

Openquery란?

  • 지정한 연결된 서버에서 특정 쿼리를 실행하는 명령어
    • 연결된 서버가 생성되지 않은 상태에서는 사용이 불가하다.

Openquery를 사용하는 이유?

그럼 이런 생각이 들 것이다.

'연결된 서버(Linked Server)와 같은데 왜 굳이 Openquery를 사용하는 걸까?'

연결된 서버는 여러명이 한 개의 DB서버를 이용하여 분산 처리를 진행 한다.

하지만 데이터 접근시 모든 값을 확인하기 때문에 데이터가 많을수록 DB서버의 성능 저하가 발생 할 수 있다.

그래서 DB 서버의 과부하 및 성능 저하를 방지하기 위해서 사용한다.

 

연결된 서버를 연결하여 데이터를 조회하는 프로세스를 살펴보자.

  • 연결된 서버
    1. 연결된 서버에서 모든 데이터 호출
    2. 원격 서버로 데이터 전달
    3. 조건 확인
    4. 데이터 값 출력

 

이번엔 오픈 쿼리를 사용하여 데이터를 조회하는 프로세스를 살펴보자.

  •  openquery
    1. 연결된 서버에서 조건에 맞는 데이터 필터링 (조건 확인)
    2. 해당되는 조건의 데이터만 원격 서버로 데이터 전달
    3. 데이터 값 출력

 

프로세스를 확인해보면,

데이터를 모두 전달하고 조건을 확인하는 것과 조건을 필터링한 데이터만 전달하는 것으로 차이가 있다.

데이터 호출 시 전달되는 데이터의 양이 다르기 때문에 오픈 쿼리를 사용하는 것이 더욱 수월 할 수 있다는 것이다.

즉, 오픈 쿼리를 사용하면 연결된 서버에서의 기존 쿼리 실행 속도보다 더 빠르게 실행 될 수 있음을 의미한다.


사용 방법

  • 쿼리의 FROM 절에 참조. 즉, 테이블 이름이 필요한 부분에 명시
    • linked_server : 연결된 서버의 이름을 나타내는 식별자로 IP, 혹은 별칭 입력
    • query : 연결된 서버에서 수행 할 쿼리문
    • 중요: 반드시 테이블명을 적을 땐, 데이터베이스.소유주.테이블명순으로 명시
OPENQUERY ( [linked_server], 'query' )
  • 쿼리 명령어를 따옴표(') 로 감싸야 함
  • 다른 데이터베이스를 select 로 데이터를 가져오는 역할

사용 예시

예시를 위한 쿼리문이며, 조건을 명시하고 데이터를 접근하는 것을 권장합니다.

-- 예시 오픈쿼리로 다른 DB서버 데이터 조회
-- 서버 : 192.168.0.1
-- DB : testdb
-- 테이블 : testtable
SELECT * from OPENQUERY([192.168.0.1], 'select * from testdb.dbo.testtable')

 

Select 문

  • SELECT * FROM openquery( [연결된서버], 'select * from 테이블' )

Insert 문

  • INSERT openquery( [연결된서버], 'select * from 테이블' ) values( '값' )

Update 문

  • UPDATE openquery( [연결된서버], 'select * from 테이블' ) SET 컬럼 = '값'

Delete 문

그대로 따라하시면 테이블 전체 값 다 지워집니다. 조건 꼭 넣으세요!!!

  • DELETE openquery( [연결된서버], 'select * from 테이블' ) 

참고

  • Microsoft SQL 문서 - OPENQUERY(Transact-SQL)

https://learn.microsoft.com/ko-kr/sql/t-sql/functions/openquery-transact-sql?view=sql-server-ver16 

 

OPENQUERY(Transact-SQL) - SQL Server

OPENQUERY(Transact-SQL)

learn.microsoft.com

 

반응형