বেশি পারফরম্যান্ট, সিটিই বা অস্থায়ী টেবিলগুলি কোনটি?


136

কোনটি আরও পারফর্মেন্ট, CTEবা Temporary Tables?


3
সম্পর্কিত প্রশ্ন: dba.stackexchange.com/q/13112
রাচেল

ব্যবহারকারীরা টেকনেট.মাইক্রোসফট.কম এর সাধারণ টেবিল এক্সপ্রেশন ব্যবহার পৃষ্ঠায় পটভূমির তথ্য (পারফরম্যান্সের সাথে সম্পর্কিত নয়) খুঁজে পেতে পারেন ।
শেরিডান

উত্তর:


62

আমি বলব এগুলি আলাদা ধারণা কিন্তু "চক এবং পনির" বলার চেয়ে আলাদা নয়।

  • একটি অস্থায়ী টেবিলটি পুনরায় ব্যবহারের জন্য বা একাধিক প্রসেসিং পাসগুলি ডেটা সেটে সঞ্চালনের জন্য ভাল।

  • একটি সিটিই পুনরাবৃত্তি করতে বা সহজভাবে পাঠযোগ্যতার উন্নত করতে ব্যবহার করা যেতে পারে।
    এবং, একটি ভিউ বা ইনলাইন টেবিলের মতো মূল্যবান ফাংশনটিকেও মূল ক্যোয়ারিতে প্রসারিত করার জন্য ম্যাক্রোর মতো বিবেচনা করা যেতে পারে

  • একটি টেম্প টেবিল হ'ল সুযোগের চারপাশে কিছু নিয়মযুক্ত একটি সারণী

আমি যেখানে উভয় ব্যবহার করি সেখানে প্রক্সগুলি সঞ্চয় করে রেখেছি (এবং টেবিলের ভেরিয়েবলগুলিও)


12
টেম্প টেবিলগুলি সূচিগুলি এবং এমনকি পরিসংখ্যানগুলিরও মঞ্জুরি দেয় যা কখনও কখনও প্রয়োজনীয় হয়, যখন কোনও সিটিই তা দেয় না।
CodeCowboyOrg

9
আমার ধারণা এই উত্তরটি সিটিই'র ভয়াবহ পারফরম্যান্সের দিকে নিয়ে যেতে পারে এই সত্যটি যথেষ্টভাবে তুলে ধরে না highlight আমি সাধারণত ডিবিএস্ট্যাকেক্সেঞ্জেনে এই উত্তরটি উল্লেখ করি। আপনার প্রশ্নটি আমার অনুসন্ধান ইঞ্জিনে দ্বিতীয় দিকে আসে যদি আমি সন্ধান করি তবে cte vs temporary tablesএই উত্তরটি সিটিইর আরও ভাল দিকগুলির অপূর্ণতাগুলি হাইলাইট করতে হবে। সংযুক্ত উত্তরের টিএল; ডিআর: কোনও সিটিই কখনই পারফরম্যান্সের জন্য ব্যবহার করা উচিত নয়। । আমি সিটিইর ডাউনসাইডগুলি অনুভব করায় আমি সেই উক্তিটির সাথে একমত।
টিটি।

2
@TT। মজাদার. আমি দেখতে পেয়েছি যে সিটিইরা আরও ভাল
পারফরম্যান্স করে

198

এটা নির্ভর করে.

সবার আগে

একটি সাধারণ টেবিল এক্সপ্রেশন কি?

একটি (পুনরুক্ত নন) সিটিই অন্যান্য কনস্ট্রাক্টের সাথে একই রকম আচরণ করা হয় যা এসকিউএল সার্ভারে ইনলাইন টেবিল এক্সপ্রেশন হিসাবেও ব্যবহার করা যেতে পারে। উত্সযুক্ত সারণী, দর্শন এবং ইনলাইন টেবিলের মূল্যবান ফাংশন। নোট করুন যেহেতু বিওএল বলছে যে একটি সিটিই "অস্থায়ী ফলাফল সেট হিসাবে বিবেচনা করা যেতে পারে" এটি একটি খাঁটি যৌক্তিক বিবরণ। প্রায়শই এটির নিজের থেকে বৈবাহিকভাবে প্রয়োগ করা হয় না।

অস্থায়ী টেবিল কী?

এটি টেম্পডিবিতে ডেটা পৃষ্ঠাগুলিতে সঞ্চিত সারিগুলির একটি সংগ্রহ। ডেটা পৃষ্ঠাগুলি আংশিক বা সম্পূর্ণ স্মৃতিতে থাকতে পারে। অতিরিক্তভাবে অস্থায়ী টেবিলটি সূচিকৃত হতে পারে এবং কলামের পরিসংখ্যান থাকতে পারে।

পরীক্ষার ডেটা

CREATE TABLE T(A INT IDENTITY PRIMARY KEY, B INT , F CHAR(8000) NULL);

INSERT INTO T(B)
SELECT TOP (1000000)  0 + CAST(NEWID() AS BINARY(4))
FROM master..spt_values v1,
     master..spt_values v2;

উদাহরণ 1

WITH CTE1 AS
(
SELECT A,
       ABS(B) AS Abs_B,
       F
FROM T
)
SELECT *
FROM CTE1
WHERE A = 780

পরিকল্পনা 1

উপরের পরিকল্পনায় নোটিশে সিটিই 1 এর উল্লেখ নেই। এটি সরাসরি বেস টেবিলগুলি সরাসরি অ্যাক্সেস করে এবং একইরূপে চিকিত্সা করা হয়

SELECT A,
       ABS(B) AS Abs_B,
       F
FROM   T
WHERE  A = 780 

এখানে মধ্যবর্তী অস্থায়ী টেবিলটিতে সিটিইকে বাস্তবায়িত করে পুনর্লিখনটি ব্যাপকভাবে উত্পাদনশীল হবে।

সিটিই সংজ্ঞাটির বাস্তবায়ন করা

SELECT A,
       ABS(B) AS Abs_B,
       F
FROM T

অস্থায়ী টেবিলের প্রায় 8GB ডেটা অনুলিপি করার সাথে জড়িত থাকে তবে এটি থেকেও নির্বাচনের ওভারহেড রয়েছে।

উদাহরণ 2

WITH CTE2
     AS (SELECT *,
                ROW_NUMBER() OVER (ORDER BY A) AS RN
         FROM   T
         WHERE  B % 100000 = 0)
SELECT *
FROM   CTE2 T1
       CROSS APPLY (SELECT TOP (1) *
                    FROM   CTE2 T2
                    WHERE  T2.A > T1.A
                    ORDER  BY T2.A) CA 

উপরের উদাহরণটি আমার মেশিনে প্রায় 4 মিনিট সময় নেয়।

এলোমেলোভাবে উত্পাদিত 1,000,000 টির মধ্যে কেবল 15 টি সারি প্রাকটিকের সাথে মেলে তবে ব্যয়বহুল টেবিল স্ক্যান এগুলি সনাক্ত করতে 16 বার ঘটে।

এখানে চিত্র বর্ণনা লিখুন

মধ্যবর্তী ফলাফল কার্যকর করার জন্য এটি ভাল প্রার্থী হবে। সমতুল্য টেম্প টেবিল পুনর্লিখন 25 সেকেন্ড সময় নিয়েছে।

INSERT INTO #T
SELECT *,
       ROW_NUMBER() OVER (ORDER BY A) AS RN
FROM   T
WHERE  B % 100000 = 0

SELECT *
FROM   #T T1
       CROSS APPLY (SELECT TOP (1) *
                    FROM   #T T2
                    WHERE  T2.A > T1.A
                    ORDER  BY T2.A) CA 

পরিকল্পনা সহ

অস্থায়ী টেবিলের একটি প্রশ্নের কোনও অংশের অন্তর্বর্তী বস্তুকরণ কখনও কখনও কার্যকর হতে পারে এমনকি যদি এটি একবারে কেবল একবার মূল্যায়ন করা হয় - যখন এটি বাকী ক্যোয়ারিকে বস্তুগত ফলাফলের পরিসংখ্যানের সুযোগ নিয়ে পুনরায় সংশ্লেষের অনুমতি দেয়। এই পদ্ধতির একটি উদাহরণ এসকিউএল ক্যাট নিবন্ধে যখন কমপ্লেক্স কোয়েরিগুলি ভেঙে ফেলা যায়

কিছু পরিস্থিতিতে এসকিউএল সার্ভার একটি মধ্যবর্তী ফলাফল, যেমন একটি সিটিইর মতো ক্যাশে করতে একটি স্পুল ব্যবহার করবে এবং সেই উপ গাছটিকে পুনরায় মূল্যায়ন করতে এড়াবে। এটি (মাইগ্রেটেড) সংযুক্ত আইটেমটিতে আলোচনা করা হয়েছে সিটিই বা উত্পন্ন টেবিলগুলির মধ্যবর্তী উপাদানকে জোর করার জন্য একটি ইঙ্গিত সরবরাহ করুন । তবে এ সম্পর্কে কোনও পরিসংখ্যান তৈরি করা হয়নি এবং এমনকি যদি ছড়িয়ে দেওয়া সারিগুলির সংখ্যা অনুমানের চেয়েও বিস্তৃত ছিল তবে অগ্রগতি সম্পাদনের পরিকল্পনার জন্য সাড়া জাগাতে গতিশীলভাবে মানিয়ে নেওয়া সম্ভব নয় (কমপক্ষে বর্তমান সংস্করণগুলিতে Ad ভবিষ্যৎ).


33
এটিই একমাত্র উত্তর যা আসল প্রশ্নের উত্তর দেয় (যা জিজ্ঞাসা করছে যে কোনটির পারফরম্যান্স ভাল যা কোনও পার্থক্য বা কোনটি আপনার পছন্দসই নয়) এবং এটি সেই প্রশ্নের সঠিক উত্তর দেয়: "এটি নির্ভর করে" সঠিক উত্তর। এটি ব্যাখ্যা করার জন্য সমর্থনকারী ডেটা সহ একমাত্র উত্তর, আরও বেশ কয়েকজন (বেশি সংখ্যক ভোট সহ) নিশ্চিত দাবি করে যে কোনও উল্লেখ বা প্রমাণ ছাড়াই অন্যের চেয়ে ভাল ... স্পষ্টতই, এই সমস্ত উত্তরও ভুল । কারণ "এটি নির্ভর করে"
আরকাইন 55

2
এটি একটি ভাল লিখিত, ভাল রেফারেন্স উত্তর। সিরিয়াসলি শীর্ষ খাঁজ।
ড্যান উইলিয়ামস

50

সিটিইর ব্যবহারগুলি রয়েছে - যখন সিটিইতে ডেটা ছোট থাকে এবং পুনরাবৃত্ত সারণীতে যেমন পাঠযোগ্যতার শক্তিশালী উন্নতি হয়। তবে এর পারফরম্যান্স অবশ্যই টেবিলের পরিবর্তনশীলগুলির চেয়ে ভাল নয় এবং যখন কেউ খুব বড় টেবিলগুলি নিয়ে কাজ করে তখন অস্থায়ী টেবিলগুলি সিটিইতে উল্লেখযোগ্যভাবে ছাপিয়ে যায়। এটি কারণ আপনি কোনও সিটিইতে সূচকগুলি সংজ্ঞায়িত করতে পারবেন না এবং যখন আপনার কাছে প্রচুর পরিমাণে ডেটা থাকে যা অন্য টেবিলে যোগ দিতে হয় (সিটিই কেবল ম্যাক্রোর মতো হয়)। আপনি যদি প্রত্যেকে লক্ষ লক্ষ সারি রেকর্ড সহ একাধিক টেবিলগুলিতে যোগ দিচ্ছেন তবে সিটিই অস্থায়ী টেবিলগুলির চেয়ে উল্লেখযোগ্যভাবে খারাপ সম্পাদন করবে।


9
আমি এটি আমার নিজের অভিজ্ঞতা থেকে দেখেছি। সিটিইর কাজগুলি ধীরে ধীরে ধীর হয়।
গোকু_দা_মাস্টার

7
ফলাফল ক্যাশে না হওয়ায় সিটিইও ধীর গতিতে পারফর্ম করে। সুতরাং আপনি যখনই সিটিই ব্যবহার করেন এটি ক্যোয়ারী, পরিকল্পনা এবং সমস্ত কিছু আবার চালায়।
goku_da_master

1
এবং ডিবি ইঞ্জিনটি কেবলমাত্র প্রতিটি রেফারেন্সই নয়, তবে গ্রাহক ক্যোয়ারীর প্রতিটি সারির জন্য একটি সম্পর্কিত সম্পর্কযুক্ত সাবকিউরি হিসাবে পুনরায় চালানো বেছে নিতে পারে ... এটি পছন্দ না হলে আপনার অবশ্যই সর্বদা নজর রাখা উচিত।
মাইক এম

টেম্প টেবিলটি এসকিউএল সার্ভারে টেম্পিডেবিতে সঞ্চিত থাকে, এটি ডিস্ক তবে সূচিযুক্ত হওয়ার সুবিধা রয়েছে এবং এসকিউএল অপ্টিমাইজার সেই ক্ষেত্রে নির্বাচিত অনুসন্ধানগুলিতে ভাল কাজ করে। কোন ডিবি বা ডিস্কের অঞ্চলে সিটিই সঞ্চিত রয়েছে তা নিশ্চিত নয় (যখন এটি মেমরির আকার ছাড়িয়ে যায় এবং আইও পেজিংয়ের জন্য সজ্জিত থাকে) তবে এটি কখনও কখনও বৃহত পরিমাণে ডেটা দিয়ে অনুকূলিত হয় না। এটি কখনও কখনও দ্রুত করার জন্য আমি সংকলক বিকল্পটি (পুনরায় সংযোগ সহ) ব্যবহার করেছি
rmehara76

33

টেম্প টেবিলগুলি সর্বদা ডিস্কে থাকে - যতক্ষণ না আপনার সিটিই মেমরিতে রাখা যায় ততক্ষণ এটি দ্রুততর হয় (টেবিলের পরিবর্তনশীলগুলির মতোও)।

তবে আবার, যদি আপনার সিটিই (বা টেম্প টেবিল ভেরিয়েবল) এর ডেটা লোডটি খুব বড় হয়ে যায়, তবে এটি ডিস্কেও সংরক্ষণ করা হবে, সুতরাং কোনও বড় সুবিধা নেই।

সাধারণভাবে, আমি কোনও টেম্প টেবিলের উপরে সিটিই পছন্দ করি যেহেতু এটি ব্যবহার করার পরে এটি চলে যায়। এটিকে স্পষ্টভাবে বা কিছু বাদ দেওয়ার বিষয়ে আমার ভাবার দরকার নেই।

সুতরাং, শেষ পর্যন্ত কোনও স্পষ্ট উত্তর নেই, তবে ব্যক্তিগতভাবে আমি টেম্প টেবিলের চেয়ে সিটিই পছন্দ করব।


2
SQLite এবং পোস্টগ্রি ক্ষেত্রে, অস্থায়ী টেবিল হয় স্বয়ংক্রিয়ভাবে বাদ (সাধারণত একটি অধিবেশন শেষে)। যদিও আমি অন্য ডিবিএমএস সম্পর্কে জানি না।
সেরানো

1
সিটিই একটি টেম্প ভিউয়ের মতো। আফাইক ডেটা সংরক্ষণ করা হয় না তাই মেমরিতে রাখা বা ডিস্কে কোনও ভ্যান রাখা যায় না। গুরুত্বপূর্ণ দ্রষ্টব্য, আপনি যখনই সিটিই ব্যবহার করেন তখন ক্যোয়ারী আবার চলে।
রব

1
ব্যক্তিগতভাবে আমি গতির জন্য কোনও টেম্প টেবিলের চেয়ে সিটিইর কাজ কখনও ভাল দেখেনি। এবং ভাল ডিবাগিং টেম্প টেবিলের সাহায্যে আরও সহজ
মার্ক মনফোটি

7

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

আমি এগুলিকে টেম্প টেবিলগুলিতে রূপান্তর করতে দুই মিনিট ব্যয় করেছি এবং ক্যোয়ারীতে 3 সেকেন্ড সময় লেগেছে

আমি যে ফিল্ডটিতে যোগ দিচ্ছিলাম তাতে টেম্প টেবিলের সাথে আমি একটি সূচক যুক্ত করেছি এবং এটি 2 সেকেন্ডে নামিয়ে আছি

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

উন্মাদ বিষয়টি হ'ল সিটিই দু'টিই একবার ব্যবহার করা হয়েছিল এবং এখনও তাদের উপর একটি সূচক রাখা 50% দ্রুত প্রমাণিত হয়েছে।


6

সিটিই কোনও শারীরিক স্থান নেবে না। এটি কেবলমাত্র একটি ফলাফল সেট যা আমরা যোগদান ব্যবহার করতে পারি।

টেম্প টেবিলগুলি অস্থায়ী। আমরা সাধারণ টেবিলের মতো সূচি তৈরি করতে পারি, সীমাবদ্ধতাগুলির জন্য আমাদের সকল ভেরিয়েবলগুলি সংজ্ঞায়িত করতে হবে।

টেম্প টেবিলের সুযোগটি কেবল সেশনের মধ্যে। EX: দুটি এসকিউএল কোয়েরি উইন্ডো খুলুন

create table #temp(empid int,empname varchar)
insert into #temp 
select 101,'xxx'

select * from #temp

এই উইন্ডোটি প্রথম উইন্ডোতে চালান তারপর নীচের ক্যোয়ারীটি দ্বিতীয় উইন্ডোটিতে চালান আপনি পার্থক্যটি দেখতে পারেন can

select * from #temp

4
>> "এটি কেবলমাত্র একটি ফলাফল সেট যা আমরা যোগদান ব্যবহার করতে পারি" " -> এটি সঠিক নয়। সিটিই এএ "ফলাফল সেট" নয় তবে ইনলাইন কোড। এসকিউএল সার্ভার কোয়েরি ইঞ্জিন সিটিই কোডটি ক্যোয়ারী পাঠ্যের অংশ হিসাবে পার্স করে এবং সেই অনুযায়ী একটি কার্যকরকরণ পরিকল্পনা তৈরি করে। সিটিই ইনলাইন রয়েছে এই ধারণাটি সিটিই ব্যবহারের বড় সুবিধা, যেহেতু এটি সার্ভারকে "সম্মিলন কার্যকর পরিকল্পনা" তৈরি করতে দেয়
রোনেন অ্যারিলি

4

আমি উভয়ই ব্যবহার করেছি তবে বিশাল জটিল পদ্ধতিগুলিতে সর্বদা টেম্প সারণিগুলির সাথে আরও ভাল এবং আরও পদ্ধতিগতভাবে কাজ করার সন্ধান পেয়েছি। সিটিইগুলির ব্যবহার রয়েছে তবে সাধারণত ছোট ডেটা থাকে।

উদাহরণস্বরূপ আমি স্প্রোকস তৈরি করেছি যা 15 সেকেন্ডে বড় গণনার ফলাফলের সাথে ফিরে আসে তবে এই কোডটি সিটিইতে চালানোর জন্য রূপান্তর করে এবং একই ফলাফল অর্জনের জন্য এটি 8 মিনিটেরও বেশি দৌড়তে দেখেছিল।


3

পার্টিতে দেরিতে, কিন্তু ...

আমি যে পরিবেশে কাজ করি তা অত্যন্ত সীমাবদ্ধ, কিছু বিক্রেতা পণ্যকে সমর্থন করে এবং "মূল্য সংযোজন" পরিষেবাদির মতো পরিষেবা সরবরাহ করে। নীতি এবং চুক্তির সীমাবদ্ধতার কারণে, আমি সাধারণত আলাদা টেবিল / ডেটা স্পেস এবং / বা স্থায়ী কোড তৈরির সক্ষমতা [প্রয়োগের উপর নির্ভর করে কিছুটা আরও ভাল হয়ে যায়] রাখার অনুমতি পাই না।

আইওডাব্লু, আমি সাধারণত কোনও সঞ্চিত প্রক্রিয়া বা ইউডিএফ বা টেম্প টেবিল ইত্যাদি বিকাশ করতে পারি না I )। একটি ছোট সঞ্চয় অনুগ্রহ হ'ল ক্রিস্টাল আমাকে কম্যান্ডস (পাশাপাশি এসকিউএল এক্সপ্রেশন) ব্যবহার করতে দেয়। কিছু জিনিস যা নিয়মিত অ্যাড / লিংক সারণীর সক্ষমতা অর্জনের মাধ্যমে দক্ষ হয় না সেগুলি এসকিউএল আদেশের সংজ্ঞা দিয়ে করা যেতে পারে। আমি এর মাধ্যমে সিটিই ব্যবহার করি এবং "দূরবর্তীভাবে" খুব ভাল ফলাফল পেয়েছি। সিটিই হ'ল ডাব্লু / রিপোর্ট রক্ষণাবেক্ষণে সহায়তা করে, কোডটি বিকাশ করার প্রয়োজন হয় না, সংকলন, এনক্রিপ্ট, স্থানান্তর, ইনস্টল, এবং তারপরে একাধিক স্তরের পরীক্ষার প্রয়োজন হয় ডিবিএর হাতে। আমি স্থানীয় ইন্টারফেসের মাধ্যমে সিটিই করতে পারি।

সিটিই ডাব্লু / সিআর ব্যবহারের নীচের দিকটি, প্রতিটি প্রতিবেদন পৃথক। প্রতিটি প্রতিবেদনের জন্য প্রতিটি সিটিই বজায় রাখতে হবে। যেখানে আমি এসপি এবং ইউডিএফগুলি করতে পারি, আমি এমন কিছু বিকাশ করতে পারি যা একাধিক প্রতিবেদনের সাহায্যে ব্যবহার করা যেতে পারে, কেবল এসপির সাথে সংযুক্ত হওয়া এবং পরামিতিগুলি পাস করার প্রয়োজন হয় যেন আপনি কোনও নিয়মিত টেবিলে কাজ করছেন। এসকিউএল কমান্ডগুলিতে প্যারামিটারগুলি পরিচালনা করতে সিআর সত্যই ভাল নয়, যাতে সিআর / সিটিই দিকটির দিকটি অভাবের হতে পারে। এই ক্ষেত্রে, আমি সাধারণত পর্যাপ্ত ডেটা (তবে সমস্ত ডেটা নয়) ফেরত দেওয়ার জন্য সিটিইকে সংজ্ঞায়িত করার চেষ্টা করি এবং তারপরে সিআর-র মধ্যে রেকর্ড নির্বাচন ক্ষমতাগুলি টুকরো টুকরো করে দেখতে চাই।

সুতরাং ... আমার ভোটটি সিটিই-র জন্য (যতক্ষণ না আমি আমার ডেটার স্পেস পাব)।


3

আমি যেখানে সিটিইর দুর্দান্ত পারফরম্যান্স বুদ্ধিমান খুঁজে পেয়েছি তার একটি ব্যবহার হ'ল যেখানে কয়েকটি সারণীতে কয়েক মিলিয়ন সারি ছিল এমন তুলনামূলক জটিল কোয়েরিতে আমাকে যোগ দিতে হবে।

আমি প্রথমে এই টেবিলগুলি কেটে কয়েক হাজার প্রাসঙ্গিক সারি কেটে প্রথমে ইনডেক্সড কলামগুলির ভিত্তিতে সাবসেটটি নির্বাচন করতে সিটিই ব্যবহার করেছি এবং তারপরে সিটিইতে আমার মূল প্রশ্নের সাথে যোগ দিলাম। এটি আমার ক্যোয়ারির রানটাইমটিকে তাত্পর্যপূর্ণভাবে হ্রাস করেছে।

যদিও সিটিইর জন্য ফলাফলগুলি ক্যাশে করা হয় না এবং টেবিলের ভেরিয়েবলগুলি আরও ভাল পছন্দ হতে পারে আমি সত্যিই তাদের চেষ্টা করে দেখতে চেয়েছিলাম এবং উপরের দৃশ্যের মাপসই খুঁজে পেয়েছি।


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

1

এটি একটি সত্যই উন্মুক্ত সমাপ্ত প্রশ্ন, এবং এটি সমস্ত কীভাবে এটি ব্যবহৃত হচ্ছে এবং টেম্প টেবিলের ধরণের (টেবিলের পরিবর্তনশীল বা traditionalতিহ্যবাহী সারণী) নির্ভর করে।

একটি traditionalতিহ্যবাহী টেম্প টেবিল অস্থায়ী ডিবিতে ডেটা সঞ্চয় করে, যা টেম্প টেবিলগুলিকে ধীর করে দেয়; টেবিল ভেরিয়েবলগুলি না।


1

আমি কেবল এটি পরীক্ষা করেছি- সিটিই এবং নন-সিটিই উভয়ই (যেখানে প্রতি ইউনিয়নের উদাহরণের জন্য ক্যোয়ারী টাইপ করা হয়েছিল) উভয়ই ~ 31 সেকেন্ড নিয়েছিল। সিটিই কোডটিকে আরও বেশি পঠনযোগ্য করে তোলে - এটি 241 থেকে 130 টি লাইন কেটে ফেলুন যা খুব সুন্দর। অন্যদিকে টেম্প টেবিলটি এটি 132 লাইনে কেটে ফেলেছে এবং চালাতে পাঁচ সেকেন্ড নিয়েছে। মজা করছি না. এই পরীক্ষার সমস্তটি ক্যাশে করা হয়েছিল - কোয়েরিগুলি সমস্ত আগে বহুবার চালানো হয়েছিল।


1

এসকিউএল সার্ভারে আমার অভিজ্ঞতা থেকে আমি এমন একটি দৃশ্যের সন্ধান পেয়েছি যেখানে সিটিই টেম্প টেবিলকে ছাড়িয়ে গেছে

আমার সঞ্চিত পদ্ধতিতে কেবলমাত্র একটি জটিল কোয়েরি থেকে আমার একটি ডেটাসেট (000 100000) ব্যবহার করা দরকার।

  • টেম্প টেবিলটি এসকিউএল-তে একটি ওভারহেডের কারণ হচ্ছিল যেখানে আমার পদ্ধতিটি ধীরে ধীরে সঞ্চালন করছে (টেম্প টেবিলগুলি প্রকৃত উপাদানযুক্ত টেবিল যা টেম্পডিবিতে বিদ্যমান এবং আমার বর্তমান পদ্ধতির জীবনের জন্য টিকে থাকে)

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

এটি এমন একটি দৃশ্য যেখানে সিটিইরা আপনার কোড এবং আউটপারফর্ম টেম্প টেবিলটিকে সহজতর করতে সত্যিই সহায়তা করতে পারে। আমি 2 টি সিটিই ব্যবহার করেছি, এরকম কিছু

WITH CTE1(ID, Name, Display) 
AS (SELECT ID,Name,Display from Table1 where <Some Condition>),
CTE2(ID,Name,<col3>) AS (SELECT ID, Name,<> FROM CTE1 INNER JOIN Table2 <Some Condition>)
SELECT CTE2.ID,CTE2.<col3>
FROM CTE2
GO

1
আপনার উত্তরটি খুব জেনারিক বলে মনে হচ্ছে ... আপনি কীভাবে "সিটিই ছাড়িয়ে টেম্প টেবিল" পরিমাপ করবেন? আপনি কিছু সময়ের পরিমাপ পেয়েছেন? আমার মতে আপনার উত্তরটি সম্পাদনা করা উচিত এবং আরও বিশদ যুক্ত করা উচিত।
ইল ভিক

হ্যাঁ আমার বক্তব্যকে সমর্থন করার জন্য আমার কাছে সময় পরিমাপ এবং এক্সিকিউশন পরিকল্পনা রয়েছে।
অমরদীপ কোহলি

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