একটি দৃশ্যে অপেনকুরি ব্যবহারের পারফরম্যান্সের প্রভাব


15

এই প্রশ্নটি স্ট্যাকওভারফ্লোতে দেখুন:

আমি একটি এসকিউএল সার্ভার ২০০৮ আর 2 এক্সপ্রেস দৃষ্টান্তটি ইন্টারবাসের সাথে সংযুক্ত করতে ইজিসফট ওডিবিসি ড্রাইভারটি ব্যবহার করছি এবং রিমোট সার্ভার থেকে মেটাডেটা পেতে আমার কিছুটা সমস্যা হচ্ছে। নেটে খোঁজাখুঁজি করা থেকে মূল অংশগুলি চারটি অংশযুক্ত লিঙ্কযুক্ত সার্ভার সিনট্যাক্সের পরিবর্তে ওপেনকুরি ব্যবহার করে উল্লেখ করে।

EG আমার বর্তমান (সমস্যাযুক্ত) পদ্ধতিটি হ'ল ...

CREATE VIEW [LIVE].[vwPRDETS]
AS

SELECT *
FROM [LBLIVE]...[PRDETS] WITH (NOLOCK)

তবে কয়েকটি টেবিলে ভিউটি কল করার সময় আমি ত্রুটি পেয়েছি ...

এমএসজি 7353, স্তর 16, রাজ্য 1, লাইন 1 লিঙ্কযুক্ত সার্ভার "LBLIVE" সরবরাহের জন্য OLE DB সরবরাহকারী "MSDASQL" সরবরাহ করেছে বেমানান মেটাডেটা। সম্পাদনের সময় একটি অতিরিক্ত কলাম সরবরাহ করা হয়েছিল যা সংকলনের সময় পাওয়া যায় নি।

এছাড়াও, কিছু মতামত আমি তৈরি করতে পারি না কারণ আমি নিম্নলিখিতগুলি পাই ...

Msg 7315, স্তর 16, রাজ্য 1, লাইন 1 লিঙ্কযুক্ত সার্ভার "LBLIVE" এর জন্য ওএলই ডিবি সরবরাহকারী "এমএসডিএএসকিউএল" তে একাধিক সারণী রয়েছে যা "" এসওয়াইএসডিবিএ "নামের সাথে মেলে" "AUDIT_LBABKP" "।

যদিও এখানে কেবল একটি সারণী উল্লেখ করা হয়েছে।

নেট অনুসন্ধান থেকে বিকল্প পদ্ধতির মতো মনে হচ্ছে ...

SELECT *
FROM OPENQUERY(<linked sevrer>, 'SELECT <column list> FROM MyTable')

সুতরাং, আমার প্রশ্নটি হ'ল আমি যদি আমার দর্শন সংজ্ঞায় ওপেনকোয়ারিটি ব্যবহার করি তবে এসকিউএল সার্ভার ফলাফল প্রাপ্ত এসকিউএলকে ইন্টারবেসে প্রেরণে অনুকূলিত করতে সক্ষম হবে? বা দুটি পদ্ধতির মধ্যে আসলেই খুব বেশি পার্থক্য নেই?

এটি সাবজেক্ট ক্রস এবং কোনও ডিবিএর পিওভি পছন্দ করবে।

উত্তর:


20

সারসংক্ষেপ

লিঙ্কযুক্ত সার্ভারটি যথাসম্ভব করতে দিন।
এটা অসম্ভব SQL সার্ভার, এমনকি অন্য SQL সার্ভার একটি লিঙ্ক সার্ভারে একটি ক্যোয়ারী নিখুত জন্য

দীর্ঘ

মূল ফ্যাক্টরটি হ'ল কোয়েরিটি কোথায় চলে।

এই ক্ষেত্রে এটি একটি তুচ্ছ নির্বাচন করুন সুতরাং একটি টেবিলের সমস্ত সারি তারের নিচে প্রেরণ করা হবে। এটা কোন ব্যাপার না।

আপনি যখন JOINs এবং WHERE যুক্ত করবেন তখন তা বিবেচনা করতে পারে। আপনি চান যে এসকিউএল সার্ভারটি লিঙ্কযুক্ত সার্ভারটিকে যতটা সম্ভব ফিল্টারিং করার অনুমতি দেয় নেটওয়ার্কের মধ্যে আসা ডেটার আকার হ্রাস করতে।

উদাহরণস্বরূপ, এখানে ২ য় ক্ষেত্রে আরও দক্ষ হওয়া উচিত।

SELECT *
FROM OPENQUERY(<linked server>, 
            'SELECT <column list> FROM MyTable') T1
     JOIN
     SomeLocalTable T2 ON ...
WHERE T1.foo = 'bar'

SELECT *
FROM OPENQUERY(<linked server>, 
           'SELECT <column list> FROM MyTable WHERE foo = ''bar''')
     JOIN
     SomeLocalTable T2 ON ...

ওপেনকুয়েরির একটি সীমাবদ্ধতা হ'ল আপনি প্যারামিটারাইজ করতে পারবেন না: সুতরাং আপনার যেখানে ক্লাউজ ইত্যাদি যুক্ত করতে গতিশীল এসকিউএল প্রয়োজন etc.

লিঙ্কযুক্ত সার্ভারের কার্যকারিতা দ্বারা প্রভাবিত হতে পারে sp_serveroption। সেটিংটি collation compatibleসব বলে

যদি এই বিকল্পটি সত্যে সেট করা থাকে, এসকিউএল সার্ভার ধরে নেয় যে লিঙ্কযুক্ত সার্ভারের সমস্ত অক্ষর স্থানীয় সার্ভারের সাথে অক্ষর সেট এবং কোলিশেশন ক্রম (বা সাজানোর ক্রম) সম্পর্কিত compatible এটি সরবরাহকারীকে অক্ষর কলামগুলিতে তুলনা করতে এসকিউএল সার্ভারকে সক্ষম করে। যদি এই বিকল্পটি সেট না করা থাকে তবে এসকিউএল সার্ভার সর্বদা স্থানীয়ভাবে অক্ষর কলামগুলিতে তুলনাগুলি মূল্যায়ন করে।

এটি, এসকিউএল সার্ভারকে স্থানীয়ভাবে ডেটা প্রক্রিয়া করতে না দেওয়ার চেষ্টা করুন।

দ্রষ্টব্য: foo = 'bar'উপরে আমার দ্বিতীয় উদাহরণে, ফিল্টারটি লিঙ্কযুক্ত সার্ভারে পাঠানো হয়েছে কারণ এটি এসকিউএল সার্ভারের কাছে কেবল একটি স্ট্রিং। প্রথম উদাহরণে আসল WHOE ধারাটি দূরবর্তী সময়ে পাঠানো হতে পারে বা নাও হতে পারে।

পরিশেষে, আমি আরও জানতে পেরেছি যে একটি টেম্প টেবিলের মধ্যে ডেটা মঞ্চ করা এবং স্থানীয় টেবিলের সাথে এতে যোগদান করা প্রায়শই ভাল হয় সরাসরি খাতায় সরাসরি যোগদান করা।


+1 দূরবর্তী সার্ভারে স্ট্রিং আক্ষরিকের তুলনায় ক্লজ তুলনাটি কেন আমার সরল ছিল না? উত্তরটি ছিল "কোলেশন সামঞ্জস্যপূর্ণ"। ধন্যবাদ।
mwardm
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.