2009-05-29 7 views
6

Cố gắng tìm hiểu xem tại sao có sự khác biệt đáng kể như vậy giữaOPENQUERY hoạt động nhanh hơn nhiều so với một truy vấn thẳng vào một bảng liên kết

select * from linkedserver..tablename

select * from openquery(linkedserver, select * from tablename).

4 phút so với 13 giây.

+0

Điều này có khác biệt không? – gbn

+0

Loại máy chủ được liên kết nào - SQL, ODBC, ??? – Arvo

+0

Xin lỗi Oracle .... –

Trả lời

0

Truy vấn mở kết nối trực tiếp với máy chủ đích. Mặc dù nói rằng RDBMS, bạn đã không nói cách khác để giao tiếp với dữ liệu là gì.

+1

Cách nào khác? ... Tôi đã đưa ra hai truy vấn đầy đủ. Đó là những gì tôi chạy. –

0

Bạn có biết nếu nó đang cố gắng tranh thủ một giao dịch phân tán trên máy chủ được liên kết không? Nếu bạn xem đầu ra Trace từ Oracle khi các cuộc gọi được thực hiện, bạn sẽ có thể thấy sự khác biệt trong các yêu cầu xảy ra. IIRC, truy vấn liên kết tiêu chuẩn sẽ yêu cầu thông tin lược đồ từ siêu dữ liệu oracle theo cách khác với lệnh gọi OPENQUERY. Tôi không biết chính xác lý do tại sao điều này xảy ra, nhưng tôi đã có một vấn đề tương tự trong quá khứ đã được giải quyết bằng cách sử dụng OPENQUERY.

3

OPENQUERY kết nối với máy chủ đích và chạy truy vấn trên máy chủ đó và trả về kết quả. Trong khi đó, tôi tin rằng truy vấn Máy chủ được Liên kết được thực hiện trên máy chủ cục bộ và chạy trên kết nối.

Hy vọng điều này sẽ hữu ích.