অস্থায়ী সারণী এবং সারণী ভেরিয়েবলের মধ্যে INSERT কার্য সম্পাদনের পার্থক্য


12

আমার এসকিউএল সার্ভার 2005-এ নিম্নলিখিত সমস্যা রয়েছে: একটি সারণী ভেরিয়েবলের মধ্যে কয়েকটি সারি সন্নিবেশ করানোর চেষ্টা করা অস্থায়ী সারণী ব্যবহার করে একই সন্নিবেশের তুলনায় অনেক সময় নেয়।

টেবিল ভেরিয়েবলের মধ্যে সন্নিবেশ করার জন্য এটি কোড

DECLARE @Data TABLE(...)
INSERT INTO @DATA( ... )
SELECT ..
FROM ...

টেম্প টেবিলটি sertোকানোর কোড এটি This

CREATE #Data TABLE(...)
INSERT INTO #DATA( ... )
SELECT ..
FROM ...
DROP TABLE #Data

অস্থায়ী সারণীতে কোনও কী বা সূচি নেই, নির্বাচিত অংশটি 2 টি প্রশ্নের মধ্যে সমান, এবং নির্বাচিত দ্বারা প্রাপ্ত ফলাফলের সংখ্যা ~ 10000 সারি। একা সিলেক্ট চালানোর জন্য প্রয়োজনীয় সময়টি হ'ল 10 সেকেন্ড।

টেম্প টেবিল সংস্করণটি নির্বাহ করতে 10 সেকেন্ড সময় নেয়, আমাকে 5 মিনিটের পরে টেবিলের পরিবর্তনশীল সংস্করণটি থামাতে হয়েছিল।

আমাকে একটি টেবিল ভেরিয়েবল ব্যবহার করতে হবে কারণ ক্যোরিটি একটি টেবিল মান ফাংশনের অংশ, এটি অস্থায়ী সারণীতে অ্যাক্সেসের অনুমতি দেয় না।

সারণী ভেরিয়েবল সংস্করণের জন্য কার্যকরকরণ পরিকল্পনা হত্যা পরিকল্পনা

টেম্প টেবিল সংস্করণের জন্য কার্যকরকরণ পরিকল্পনা হত্যা পরিকল্পনা

উত্তর:


8

দুটি পরিকল্পনার মধ্যে সুস্পষ্ট পার্থক্য হ'ল দ্রুততমটি সমান্তরাল এবং ধীরে ধীরে একটি সিরিয়াল।

এটি পরিকল্পনার সীমাবদ্ধতার মধ্যে একটি যা সারণী ভেরিয়েবলগুলিতে সন্নিবেশিত করে। মন্তব্যে যেমন উল্লেখ করা হয়েছে (এবং মনে হচ্ছে এটির কাঙ্ক্ষিত প্রভাব রয়েছে) আপনি চেষ্টা করতে পারেন

INSERT INTO @DATA ( ... ) 
EXEC('SELECT .. FROM ...')

এটি সীমাবদ্ধতার কাছাকাছি পায় কিনা তা দেখতে।


এটি একটি দুর্দান্ত পরামর্শ ছিল, যদিও আমি যদিও আপনি EXECকোনও ফাংশনে ব্যবহার করতে পারবেন না .... অনুমান আমি ভুল ছিলাম
লামাক

1
@ লামাক - দোহ! আপনি এটি করতে পারবেন না এটি অপের পক্ষে কাজ করবে না। Invalid use of a side-effecting operator 'INSERT EXEC' within a function.প্রায় কাজ যথাসাধ্য কাজ যদিও। OPENQUERY
মার্টিন স্মিথ

আহ, জেনে রাখা ভাল, স্পষ্টতার জন্য ধন্যবাদ
লামাক

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

1
@ মিনিসর, তারপরে কোনও টেবিলের মূল্যবান ফাংশন ব্যবহার করবেন না। আপনি যদি ভাল পরামর্শ পোস্ট করতে চান তবে ঠিক কী করছেন।
এইচএলজিইএম

-1

সারণী ভেরিয়েবলগুলি কখনও কখনও ধীর হয় কারণ টেবিলের ভেরিয়েবলগুলির কোনও পরিসংখ্যান নেই এবং সুতরাং অপ্টিমাইজারটি সর্বদা কেবল একটি রেকর্ড ধরে নেয়।

তবে আমি এখানে গ্যারান্টি দিতে পারি না যে এখানে এটিই রয়েছে, আপনাকে সারণী ভেরিয়েবলের ক্যোয়ারী পরিকল্পনার "আনুমানিক সারি" তথ্যটি একবার দেখে নিতে হবে।


এটি কীভাবে কোনও সারণী ভেরিয়েবলের মধ্যে একটি সন্নিবেশকে প্রভাবিত করবে?
মার্টিন স্মিথ

এটি যা চলছে বলে মনে হচ্ছে, আপনি দেখতে পাচ্ছেন যে কেবল প্যারালাল এবং সিরিয়ালের মধ্যেই পার্থক্য নেই তবে হ্যাশ এবং নেস্টেড লুপের সাথেও যোগ দেয়, স্পষ্টতই অপ্টিমাইজারটি ধরে নেয় যে টেবিলের ভেরিয়েবল তার মনে একটি রেকর্ড ধারণ করে তখন ফলাফল ক্যোয়ারীর একটিও রেকর্ড হবে, আবারও প্রমাণের একমাত্র উপায় কোয়েরির প্রতিটি অংশের প্রকৃত পরিসংখ্যানগুলি দেখা হবে, তবে আসল বিষয়টি হ'ল টেবিলের ভেরিয়েবলগুলি সম্পর্কিত সমস্ত প্রশ্নগুলি লুপের সাথে যোগ দেয় এবং সিরিয়াল প্রসেসিং, সুতরাং আমি এখানে এটি সন্দেহ করা মোটামুটি বিষয়
yoel halb
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.