টেম্পোরারি টেবিল এবং টেবিল ভেরিয়েবল উভয়ই ডেটা অস্থায়ীভাবে সংরক্ষণ করতে ব্যবহৃত হয়, তবে এদের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে। এখানে তাদের ব্যবহারের পদ্ধতি, সুবিধা এবং পার্থক্য ব্যাখ্যা করা হবে।
১. টেম্পোরারি টেবিল (Temporary Tables)
টেম্পোরারি টেবিল হল এমন একটি টেবিল যা শুধুমাত্র SQL Server সেশনের জন্য বা ডেটাবেস কানেকশনের জন্য মেয়াদী থাকে। এই টেবিলগুলি টেবিলের মতো আচরণ করে এবং এতে সমস্ত SQL অপারেশন যেমন SELECT, INSERT, UPDATE, DELETE করা যেতে পারে। তবে এগুলি সেশন শেষ হলে বা কোডের কার্যক্রম শেষ হলে স্বয়ংক্রিয়ভাবে মুছে ফেলা হয়।
দুই ধরনের টেম্পোরারি টেবিল:
- লোকাল টেম্পোরারি টেবিল: এটি
#দিয়ে শুরু হয় এবং শুধুমাত্র এক সেশনের মধ্যে উপলব্ধ থাকে। - গ্লোবাল টেম্পোরারি টেবিল: এটি
##দিয়ে শুরু হয় এবং সমস্ত সেশন থেকে অ্যাক্সেসযোগ্য থাকে, যতক্ষণ না SQL Server সার্ভারটি বন্ধ না হয়।
উদাহরণ: লোকাল টেম্পোরারি টেবিল
-- টেম্পোরারি টেবিল তৈরি করা
CREATE TABLE #TempEmployee (
EmployeeID INT,
EmployeeName VARCHAR(100)
);
-- টেবিলের মধ্যে ডেটা ইনসার্ট করা
INSERT INTO #TempEmployee (EmployeeID, EmployeeName)
VALUES (1, 'John Doe'), (2, 'Jane Smith');
-- টেবিল থেকে ডেটা নির্বাচন করা
SELECT * FROM #TempEmployee;
-- টেবিল মুছে ফেলা (স্বয়ংক্রিয়ভাবে সেশন শেষ হলে মুছে যাবে)
DROP TABLE #TempEmployee;
এখানে, #TempEmployee হল একটি লোকাল টেম্পোরারি টেবিল, যা শুধুমাত্র চলমান সেশন পর্যন্ত থাকবে।
উদাহরণ: গ্লোবাল টেম্পোরারি টেবিল
-- গ্লোবাল টেম্পোরারি টেবিল তৈরি করা
CREATE TABLE ##GlobalTempEmployee (
EmployeeID INT,
EmployeeName VARCHAR(100)
);
-- ডেটা ইনসার্ট করা
INSERT INTO ##GlobalTempEmployee (EmployeeID, EmployeeName)
VALUES (1, 'John Doe'), (2, 'Jane Smith');
-- টেবিল থেকে ডেটা নির্বাচন করা
SELECT * FROM ##GlobalTempEmployee;
-- গ্লোবাল টেবিল মুছে ফেলা
DROP TABLE ##GlobalTempEmployee;
এখানে, ##GlobalTempEmployee হল একটি গ্লোবাল টেম্পোরারি টেবিল, যা সার্ভারের সমস্ত সেশন থেকে অ্যাক্সেসযোগ্য।
২. টেবিল ভেরিয়েবল (Table Variables)
টেবিল ভেরিয়েবল একটি ভেরিয়েবল যার মধ্যে টেবিলের মতো ডেটা সংরক্ষণ করা হয়। এটি স্রেফ একটি ভেরিয়েবল হিসেবে ঘোষণা করা হয় এবং এটি শুধুমাত্র সেই স্কোপে কাজ করে যেখানে এটি ঘোষণা করা হয়েছে (যেমন একটি ব্লক বা সেশন)। এটি একাধিক রেকর্ড ধারণ করতে পারে এবং সহজভাবে কোডে ব্যবহার করা যায়।
টেবিল ভেরিয়েবল স্বয়ংক্রিয়ভাবে মুছে ফেলা হয় যখন স্কোপ শেষ হয়, এবং এটি ছোট ডেটাসেটের জন্য ব্যবহৃত হয়।
উদাহরণ: টেবিল ভেরিয়েবল
-- টেবিল ভেরিয়েবল ঘোষণা করা
DECLARE @EmployeeTable TABLE (
EmployeeID INT,
EmployeeName VARCHAR(100)
);
-- টেবিল ভেরিয়েবলে ডেটা ইনসার্ট করা
INSERT INTO @EmployeeTable (EmployeeID, EmployeeName)
VALUES (1, 'John Doe'), (2, 'Jane Smith');
-- টেবিল ভেরিয়েবল থেকে ডেটা নির্বাচন করা
SELECT * FROM @EmployeeTable;
এখানে, @EmployeeTable হল একটি টেবিল ভেরিয়েবল, যা সাধারণত ছোট ডেটাসেটের জন্য ব্যবহৃত হয় এবং এতে ডেটা ইনসার্ট, সিলেক্ট, আপডেট করা যেতে পারে।
৩. টেম্পোরারি টেবিল এবং টেবিল ভেরিয়েবলের মধ্যে পার্থক্য
| বৈশিষ্ট্য | টেম্পোরারি টেবিল (Temporary Table) | টেবিল ভেরিয়েবল (Table Variable) |
|---|---|---|
| সীমাবদ্ধতা | নির্দিষ্ট সেশন বা সার্ভার লেভেলে থাকে, গ্লোবাল বা লোকাল হতে পারে | একটি ব্লক বা সেশন স্কোপে থাকে |
| প্রকার | টেবিল | ভেরিয়েবল |
| পর্ফরমেন্স | বড় ডেটাসেটের জন্য আরও উপযুক্ত, কারণ এটি ডেটাবেসের সঙ্গে ইন্টারঅ্যাক্ট করে | ছোট ডেটাসেটের জন্য উপযুক্ত, কিন্তু বড় ডেটাসেটের জন্য উপযুক্ত নয় |
| ডেটা প্রক্রিয়াকরণ | অ্যাগ্রিগেট ফাংশন, জয়েন, সাবকুয়েরি সমর্থন করে | সীমিত সমর্থন (অ্যাক্সেস পদ্ধতি এবং কিছু কন্ডিশন আলাদা হতে পারে) |
| স্কোপ | সার্ভারের পুরো সেশন অথবা সঠিকভাবে ডিফাইন করা স্কোপ | শুধুমাত্র DECLARE স্কোপ পর্যন্ত (সেখানে যেখানে এটি ঘোষণা করা হয়েছে) |
| প্রবেশাধিকার | অন্যান্য সেশন থেকে অ্যাক্সেসযোগ্য হতে পারে (গ্লোবাল টেবিল) | শুধুমাত্র স্থানীয় স্কোপে অ্যাক্সেসযোগ্য |
| ড্রপ | সেশন বা টেবিলের শেষে স্বয়ংক্রিয়ভাবে ড্রপ হয় না, তবে DROP করতে হয় | স্বয়ংক্রিয়ভাবে ড্রপ হয়ে যায় যখন স্কোপ শেষ হয় |
সারাংশ
- টেম্পোরারি টেবিল একটি টেবিলের মতো আচরণ করে এবং এটি ডেটাবেসের মধ্যে সংরক্ষিত হয়, তবে এটি শুধুমাত্র নির্দিষ্ট সেশন বা টেবিল স্কোপের জন্য মেয়াদী থাকে।
- টেবিল ভেরিয়েবল একটি ভেরিয়েবল যার মধ্যে টেবিলের মতো ডেটা রাখা হয় এবং এটি ছোট ডেটাসেটের জন্য উপযুক্ত, তবে এর স্কোপ সীমিত থাকে।
টেম্পোরারি টেবিল সাধারণত বৃহৎ ডেটাসেট এবং জটিল প্রক্রিয়া পরিচালনা করতে ব্যবহৃত হয়, যেখানে টেবিল ভেরিয়েবল ছোট ডেটাসেট এবং সহজ অপারেশনের জন্য উপযুক্ত।
Temporary tables (অস্থায়ী টেবিল) T-SQL-এ একটি গুরুত্বপূর্ণ ফিচার যা ডেটাবেসের মধ্যে সাময়িক ডেটা স্টোরেজের জন্য ব্যবহৃত হয়। এগুলি সাধারণত এমন ডেটার জন্য ব্যবহৃত হয় যা টেবিলের মধ্যে দীর্ঘ সময়ের জন্য রাখা প্রয়োজন হয় না, যেমন ইন্টারিম ফলাফল বা ইন্টারমিডিয়েট হিসাব।
T-SQL-এ দুই ধরনের temporary table রয়েছে:
- Local Temporary Table (
#) - Global Temporary Table (
##)
১. Local Temporary Table (#)
Local temporary tables এমন টেবিল যা session-specific (সেশন ভিত্তিক) এবং একটি নির্দিষ্ট সেশন বা সংযোগে (connection) কার্যকর থাকে। একবার সেশন বন্ধ হলে, এই টেবিলগুলি স্বয়ংক্রিয়ভাবে মুছে যায়।
Local Temporary Table তৈরি এবং ব্যবহার:
CREATE TABLE #TempTable (
ID INT,
Name VARCHAR(50)
);
INSERT INTO #TempTable (ID, Name)
VALUES (1, 'Alice'), (2, 'Bob');
SELECT * FROM #TempTable;
-- Local temporary table মুছে ফেলা হবে যদি সেশন বন্ধ হয়
এখানে:
- #TempTable একটি local temporary table।
- এটি শুধুমাত্র বর্তমান SQL Server সেশনে উপলব্ধ থাকবে এবং সেশন শেষ হলে এই টেবিলটি মুছে যাবে।
Local Temporary Table এর বৈশিষ্ট্য:
- Session-specific: টেবিলটি শুধুমাত্র সংশ্লিষ্ট সেশনে দেখা যাবে।
- Automatic deletion: সেশন শেষ হলে টেবিলটি মুছে যাবে।
- এটি একাধিক ব্যবহারকারীর জন্য আলাদা থাকবে, এক ব্যবহারকারী অন্য ব্যবহারকারীর টেবিল অ্যাক্সেস করতে পারবে না।
২. Global Temporary Table (##)
Global temporary tables এমন টেবিল যা server-wide (সার্ভার ভিত্তিক) এবং সমস্ত সেশনের জন্য উপলব্ধ। একটি global temporary table তৈরি করার পর, এটি সমস্ত SQL Server সেশনে দেখতে পাওয়া যাবে যতক্ষণ না সব সেশন থেকে এটি মুছে না দেওয়া হয়।
Global Temporary Table তৈরি এবং ব্যবহার:
CREATE TABLE ##GlobalTempTable (
ID INT,
Name VARCHAR(50)
);
INSERT INTO ##GlobalTempTable (ID, Name)
VALUES (1, 'John'), (2, 'Jane');
SELECT * FROM ##GlobalTempTable;
-- Global temporary table সেশন বন্ধ হলে মুছে যাবে না, যতক্ষণ না তা explicitly DROP করা হয়
এখানে:
- ##GlobalTempTable একটি global temporary table।
- এটি সার্ভারের সব সেশনে অ্যাক্সেসযোগ্য হবে এবং যতক্ষণ না একে DROP করা হয়, এটি সার্ভারে থেকে যাবে।
Global Temporary Table এর বৈশিষ্ট্য:
- Server-wide: সার্ভারের সমস্ত সেশন (connections) থেকে এটি অ্যাক্সেস করা যাবে।
- Explicit deletion: সার্ভারের সমস্ত সেশন বন্ধ হওয়ার পরেও এটি মুছে যাবে না, তবে একে ম্যানুয়ালি DROP করতে হবে।
- এটি সব ব্যবহারকারী দ্বারা অ্যাক্সেসযোগ্য, তবে ব্যবহারকারী শুধুমাত্র অনুমোদিত হলে এটি ম্যানিপুলেট করতে পারে।
৩. Temporary Table এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Local Temporary Table (#) | Global Temporary Table (##) |
|---|---|---|
| Access | শুধুমাত্র বর্তমান সেশন দ্বারা অ্যাক্সেসযোগ্য | সার্ভারের সকল সেশন দ্বারা অ্যাক্সেসযোগ্য |
| Lifetime | সেশন শেষ হলে মুছে যায় | সার্ভারের সমস্ত সেশন থেকে মুছে না গেলে থাকে |
| Name Visibility | শুধুমাত্র বর্তমান সেশনে দৃশ্যমান | সার্ভারের সব সেশনে দৃশ্যমান |
| Data Scope | শুধুমাত্র সংশ্লিষ্ট সেশনের ডেটা | সার্ভারের সকল সেশন থেকে ডেটা অ্যাক্সেসযোগ্য |
| Auto Drop | সেশন বন্ধ হলে স্বয়ংক্রিয়ভাবে মুছে যায় | সেশন বন্ধ হলেও মুছে না গিয়ে DROP করতে হবে |
৪. Temporary Table ব্যবহার করার সুবিধা
- Performance: Temporary tables ডেটা প্রক্রিয়াকরণের সময় ইন্টারমিডিয়েট ডেটা রাখে, যা একাধিক কুয়েরি বা রিকোয়েস্টের মধ্যে পুনরায় ব্যবহার করা যেতে পারে।
- Isolation: Local temporary tables বিভিন্ন ব্যবহারকারীর জন্য আলাদা থাকে, যা তাদের মধ্যে ডেটার সংঘর্ষ এড়ায়।
- Memory Optimization: বড় ডেটাসেটের সঙ্গে কাজ করার জন্য temporary tables ব্যবহার করা হলে সার্ভারের স্থায়ী টেবিলগুলোর উপর চাপ কমে এবং মেমরি ব্যবহারের কার্যকরী উন্নয়ন হয়।
সারাংশ
Local Temporary Table (#) এবং Global Temporary Table (##) T-SQL এ অস্থায়ী টেবিল তৈরি করার জন্য ব্যবহৃত হয়। Local temporary tables শুধুমাত্র সংশ্লিষ্ট সেশন দ্বারা অ্যাক্সেসযোগ্য হয় এবং সেশন শেষ হলে স্বয়ংক্রিয়ভাবে মুছে যায়। অন্যদিকে, Global temporary tables সার্ভারের সকল সেশন থেকে অ্যাক্সেসযোগ্য এবং সার্ভার বন্ধ না হওয়া পর্যন্ত টেবিলটি থাকে, তবে একে ম্যানুয়ালি DROP করতে হয়। Temporary tables ডেটাবেসে সাময়িক ডেটা পরিচালনা করার জন্য অত্যন্ত কার্যকরী।
Table Variables T-SQL (Transact-SQL)-এ একটি বিশেষ ধরনের ভেরিয়েবল যা অস্থায়ী টেবিলের মতো কাজ করে, তবে এটি স্কোপ বা লাইফটাইম এর দিক থেকে ভিন্ন। টেবিল ভেরিয়েবলস সাধারণত ছোট আকারের ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়, যেগুলি খুব বেশি সময় ধরে সংরক্ষণ করতে হয় না এবং যেগুলি শুধুমাত্র একটি নির্দিষ্ট স্কোপের মধ্যে ব্যবহৃত হয়।
Table Variables সাধারণত DECLARE কিওয়ার্ডের মাধ্যমে ডিফাইন করা হয় এবং তাদের INSERT, UPDATE, SELECT ইত্যাদি অপারেশন করার জন্য ব্যবহার করা যায়।
Table Variable এর সিনট্যাক্স:
DECLARE @TableVariableName TABLE
(
Column1 DataType,
Column2 DataType,
...
);
এখানে:
- @TableVariableName: টেবিল ভেরিয়েবলের নাম, যা
@চিহ্ন দিয়ে শুরু হয়। - Column1, Column2, ...: টেবিলের কলামগুলো এবং তাদের ডেটা টাইপ।
Table Variables ব্যবহার করা
১. Table Variable ডিক্লেয়ার করা
DECLARE @Employees TABLE
(
EmployeeID INT,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Department VARCHAR(50)
);
এখানে একটি টেবিল ভেরিয়েবল @Employees ডিফাইন করা হয়েছে, যার মধ্যে চারটি কলাম রয়েছে: EmployeeID, FirstName, LastName, এবং Department।
২. ডেটা ইনসার্ট করা
Table Variable এ ডেটা ইনসার্ট করার জন্য INSERT INTO ব্যবহার করা হয়:
INSERT INTO @Employees (EmployeeID, FirstName, LastName, Department)
VALUES (1, 'John', 'Doe', 'HR'),
(2, 'Jane', 'Smith', 'IT'),
(3, 'Robert', 'Johnson', 'Finance');
এটি @Employees টেবিল ভেরিয়েবলে তিনটি রেকর্ড ইনসার্ট করবে।
৩. ডেটা নির্বাচন (SELECT)
Table Variable থেকে ডেটা নির্বাচন করতে SELECT কমান্ড ব্যবহার করা হয়:
SELECT * FROM @Employees;
এটি @Employees টেবিল ভেরিয়েবল থেকে সমস্ত রেকর্ড নির্বাচন করবে।
৪. ডেটা আপডেট করা
Table Variable এ ডেটা আপডেট করতে UPDATE কমান্ড ব্যবহার করা হয়:
UPDATE @Employees
SET Department = 'Marketing'
WHERE EmployeeID = 2;
এটি @Employees টেবিল ভেরিয়েবল থেকে EmployeeID 2 এর জন্য Department কলামের মান আপডেট করবে।
৫. ডেটা মুছে ফেলা (DELETE)
Table Variable থেকে ডেটা মুছে ফেলতে DELETE কমান্ড ব্যবহার করা হয়:
DELETE FROM @Employees WHERE EmployeeID = 3;
এটি @Employees টেবিল ভেরিয়েবল থেকে EmployeeID 3 এর রেকর্ডটি মুছে ফেলবে।
Table Variables এর সুবিধা
- কমপ্যাক্ট এবং দ্রুত:
- Table Variables সাধারণত ছোট ডেটা সেটের জন্য বেশি কার্যকরী এবং এগুলি দ্রুত এক্সিকিউট হয়।
- বড় অস্থায়ী টেবিলের তুলনায় এদের মেমোরি ব্যবহার তুলনামূলকভাবে কম হয়।
- ট্রানজ্যাকশন সাপোর্ট:
- Table Variables ট্রানজ্যাকশন ব্লকের মধ্যে ব্যবহার করা যায়, যা তাদের কার্যকারিতা বাড়ায়।
- স্কোপ নিয়ন্ত্রণ:
- Table Variables-এ থাকা ডেটা শুধুমাত্র সেই স্কোপের মধ্যে জীবিত থাকে যেখানে তা ডিক্লেয়ার করা হয়েছে। অর্থাৎ, স্কোপ শেষে এই ভেরিয়েবল স্বয়ংক্রিয়ভাবে ডিলিট হয়ে যায়।
- ইনডেক্সিং এবং কনস্ট্রেইন্ট:
- Table Variables ইনডেক্সিং এবং কনস্ট্রেইন্ট সমর্থন করে না, তবে কিছু নির্দিষ্ট শর্তের জন্য উপযুক্ত।
- তুলনামূলকভাবে সহজ ব্যবস্থাপনা:
- Table Variables সাধারণত অস্থায়ী টেবিলের তুলনায় কম ব্যবস্থাপনা এবং ডিস্ক স্পেস ব্যবহার করে, যা কর্মক্ষমতা উন্নত করে।
Table Variables এর সীমাবদ্ধতা
- ইনডেক্সিং:
- Table Variables সাধারণত ইনডেক্স বা কনস্ট্রেইন্ট সমর্থন করে না। এটি একটি বড় সীমাবদ্ধতা হতে পারে যখন বৃহত আকারের ডেটা ব্যবস্থাপনা করতে হয়।
- ডেটা সাইজ:
- Table Variables ডেটা সাইজের জন্য কিছু সীমাবদ্ধতা থাকে। সাধারণত খুব বড় ডেটাসেটের জন্য Temporary Tables ব্যবহার করা শ্রেয়।
- পারফরম্যান্স সমস্যা:
- যখন টেবিল ভেরিয়েবলগুলো খুব বড় হয়ে যায়, তখন সেগুলোর পারফরম্যান্স কিছুটা কমে যেতে পারে, বিশেষত যখন এগুলো JOIN বা অন্যান্য জটিল অপারেশনে ব্যবহৃত হয়।
Table Variables ব্যবহারের ক্ষেত্র
- স্বল্প আকারের ডেটা সংরক্ষণ:
- সাধারণত Table Variables ছোট আকারের ডেটার জন্য উপযুক্ত, যেমন একটি স্টোরড প্রসিডিউর বা ফাংশনের মধ্যে ম্যানিপুলেশন করা ডেটা।
- অস্থায়ী ডেটা কাজ:
- যখন আপনি কিছু অস্থায়ী ডেটা ব্যবহার করছেন যেগুলি শুধুমাত্র একটি নির্দিষ্ট স্কোপে প্রয়োজন, তখন Table Variables ব্যবহার করা যেতে পারে।
- ডেটা বিশ্লেষণ:
- ছোট ডেটা সেটের বিশ্লেষণ করার জন্য এটি উপযুক্ত। উদাহরণস্বরূপ, পছন্দের কোন ডেটা নির্বাচন এবং তার পরিপ্রেক্ষিতে কিছু হিসাব করা।
- জটিল কুয়েরি স্টেপস:
- জটিল কুয়েরি স্টেপসের মধ্যে অন্তর্বর্তী ডেটা সংরক্ষণ এবং প্রক্রিয়াকরণের জন্য ব্যবহার করা যায়।
সারাংশ
Table Variables T-SQL-এ অস্থায়ী ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়, যেখানে ইনসার্ট, আপডেট, সিলেক্ট, এবং ডিলিট করা যেতে পারে। এগুলি ছোট আকারের ডেটার জন্য উপযুক্ত এবং এগুলোর ব্যবহার সহজ এবং দ্রুত। তবে, ইনডেক্সিং, কনস্ট্রেইন্ট, এবং বড় ডেটা ব্যবস্থাপনায় তাদের কিছু সীমাবদ্ধতা রয়েছে, যেখানে অস্থায়ী টেবিল (Temporary Tables) বেশি কার্যকরী হতে পারে।
Temporary Tables এবং Table Variables T-SQL-এ ডেটা স্টোর করার জন্য ব্যবহৃত দুটি ভিন্ন ধরনের অবজেক্ট। তবে তাদের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে যা তাদের ব্যবহার এবং কার্যকারিতাকে প্রভাবিত করে। নিচে Temporary Tables এবং Table Variables এর মধ্যে পার্থক্যগুলি বিস্তারিতভাবে আলোচনা করা হলো:
১. ডেফিনিশন এবং স্কোপ
- Temporary Tables:
- Temporary Tables সাধারণত একটি # (Single Hash) বা ## (Double Hash) চিহ্ন দ্বারা চিহ্নিত হয়। এগুলি একটি সেশন বা একটি কনেকশনের জন্য সময়সীমিত হয় এবং Session-level বা Global-level হতে পারে।
- Session-level Temporary Tables: এই ধরনের টেবিল কেবল সেই সেশন বা কনেকশনে উপলব্ধ থাকে যেখানে এটি তৈরি করা হয়েছে এবং সেই সেশন বন্ধ না হওয়া পর্যন্ত জীবিত থাকে।
- Global Temporary Tables:
##দিয়ে শুরু হয় এবং সমস্ত সেশনে উপলব্ধ থাকে, তবে টেবিলটি যখন আর কোনো সেশনে ব্যবহার করা না হয়, তখন এটি ডিলিট হয়ে যায়।
- Table Variables:
- Table Variables হল একটি ধরনের ভেরিয়েবল যা DECLARE দিয়ে ঘোষণা করা হয় এবং সাধারণত ছোট ডেটা সেটে ব্যবহৃত হয়। এটি Local-level ডেটা স্টোরেজ হিসাবে কাজ করে এবং টেবিলের মতো আচরণ করতে পারে, তবে এটি একটি variable হিসাবে ব্যবহৃত হয় এবং তার স্কোপ শুধুমাত্র স্টোরড প্রসিডিউর, ফাংশন, বা স্ক্রিপ্টের মধ্যে সীমাবদ্ধ থাকে।
২. পারফরম্যান্স
- Temporary Tables:
- Temporary Tables বেশি জটিল ডেটা বা বৃহৎ ডেটাসেটের জন্য উপযুক্ত।
- এই টেবিলগুলো Indexes এবং Constraints (যেমন Primary Key, Foreign Key) সমর্থন করে, যা পারফরম্যান্স উন্নত করতে সহায়ক হতে পারে।
- Disk-based: Temporary Tables সাধারণত ডিস্কে স্টোর হয়, যা বড় ডেটাসেটের ক্ষেত্রে কিছু সময় প্রয়োগ করতে পারে, তবে স্বয়ংক্রিয়ভাবে পরিষ্কার হয়ে যায়।
- Table Variables:
- Table Variables ছোট ডেটাসেটের জন্য উপযুক্ত, এবং সাধারণত In-memory (মেমোরি ভিত্তিক) স্টোরেজ ব্যবহার করে।
- পারফরম্যান্সে সাধারণত ভালো, কারণ এটি মেমোরিতে চলে এবং ডিস্কের সাথে সম্পর্কিত নয়।
- Table Variables সাধারণত Indexes সমর্থন করে না (যদিও Primary Key ও Unique Constraints সমর্থন করে), যা তাদের কার্যকারিতা কিছুটা সীমিত করে।
৩. লকিং এবং ট্রানজেকশন
- Temporary Tables:
- Temporary Tables ট্রানজেকশন এবং লকিং মেকানিজম সমর্থন করে। এগুলি Explicit Locks (যেমন READ COMMITTED) এর অধীনে কাজ করে, অর্থাৎ আপনি যখন এই টেবিলগুলিতে ডেটা লেখেন বা পড়েন তখন SQL Server অটোমেটিকভাবে লকিং প্রয়োগ করে।
- Table Variables:
- Table Variables তেমন কোন লকিং মেকানিজম সমর্থন করে না। এগুলি মূলত memory-resident হওয়ায় কোনো Explicit Locking করা হয় না এবং এতে transaction log কম থাকে, তবে এটি বড় ডেটাসেটের ক্ষেত্রে কম কার্যকরী হতে পারে।
৪. ডেটা ইনসার্ট এবং ম্যানিপুলেশন
- Temporary Tables:
- Temporary Tables সাধারণ টেবিলের মতো ব্যবহার করা যায়। আপনি INSERT, UPDATE, DELETE, এবং SELECT সহ অন্যান্য SQL অপারেশন চালাতে পারেন। এই টেবিলগুলিতে JOIN বা Aggregations এর মতো জটিল অপারেশনও করা সম্ভব।
- Table Variables:
- Table Variables এ ডেটা ইনসার্ট, আপডেট, এবং সিলেক্ট করা যায়, তবে এটি বড় ডেটাসেটের জন্য সেরা না। তবে এদের সাথে JOIN করতে পারবেন, তবে এগুলিতে অনেক জটিল অপারেশন কার্যকরী নাও হতে পারে।
৫. স্বচ্ছতা (Scope)
- Temporary Tables:
- Temporary Tables সেশনের মধ্যে Global বা Session-specific হতে পারে, এবং একাধিক সেশন বা ইউজার একই টেবিল ব্যবহার করতে পারে (বিশেষত Global Temporary Tables ক্ষেত্রে)।
- Table Variables:
- Table Variables এর স্কোপ একটি স্টোরড প্রসিডিউর বা স্ক্রিপ্টের মধ্যে সীমাবদ্ধ থাকে। একবার এই স্কোপ শেষ হলে, এটি স্বয়ংক্রিয়ভাবে ডিলিট হয়ে যায়।
৬. ডিলিট এবং পরিষ্কার (Cleanup)
- Temporary Tables:
- Temporary Tables সাধারণত DROP কমান্ড বা সেশন বন্ধ হলে নিজে নিজে ডিলিট হয়ে যায়।
- যদি আপনি Session-level Temporary Table তৈরি করেন, তবে এটি সেশন বন্ধ না হওয়া পর্যন্ত জীবিত থাকে।
- Table Variables:
- Table Variables একটি Local scope হিসাবে কাজ করে এবং END বা RETURN কমান্ডের পরই এটি পরিষ্কার হয়ে যায়। এর জন্য আলাদাভাবে ডিলিট করার প্রয়োজন নেই।
৭. শর্ত (Conditions)
- Temporary Tables:
- Temporary Tables সাধারণত বড় ডেটা প্রক্রিয়াকরণ এবং ম্যানিপুলেশন করার জন্য ব্যবহৃত হয়। সেগুলিতে Primary Keys, Indexes, এবং Constraints সেট করা সম্ভব, যা তাদের আরও শক্তিশালী এবং কার্যকরী করে তোলে।
- Table Variables:
- Table Variables ছোট, সহজ ডেটা সংরক্ষণ এবং প্রক্রিয়াকরণ এর জন্য ব্যবহার করা হয়, এবং এদের কোন Indexes নেই। তবে Primary Key বা Unique Constraints ব্যবহার করা সম্ভব।
সারাংশ
| বৈশিষ্ট্য | Temporary Tables | Table Variables |
|---|---|---|
| স্কোপ | Session বা Global | Local (একটি স্টোরড প্রসিডিউর/ফাংশন পর্যন্ত) |
| পারফরম্যান্স | বড় ডেটাসেটের জন্য ভালো (Disk-based) | ছোট ডেটাসেটের জন্য ভালো (In-memory) |
| লকিং এবং ট্রানজেকশন | লকিং এবং ট্রানজেকশন সমর্থন করে | কোন লকিং নয়, ট্রানজেকশন log কম |
| ডেটা ম্যানিপুলেশন | Complex JOIN, Aggregations সমর্থন করে | সহজ ডেটা ম্যানিপুলেশন, Complex অপারেশন কম |
| ডিলিট এবং পরিষ্কার | সেশন বন্ধ বা DROP কমান্ডে ডিলিট হয় | END বা RETURN এর পরে পরিষ্কার হয় |
| Constraints এবং Indexes | Constraints এবং Indexes সমর্থন করে | কিছু কাস্টম Constraints সমর্থন করে, তবে Indexes সমর্থন করে না |
উপসংহারে, Temporary Tables এবং Table Variables দুটোই ডেটা স্টোর করার জন্য ব্যবহৃত হয়, তবে তাদের ব্যবহারের পরিধি, পারফরম্যান্স এবং ফিচারগুলো বিভিন্ন। সাধারণত, বড় ডেটাসেট এবং জটিল ডেটা ম্যানিপুলেশন এর জন্য Temporary Tables ব্যবহার করা হয়, আর ছোট এবং দ্রুতগতির ডেটা প্রক্রিয়াকরণের জন্য Table Variables ব্যবহার করা হয়।
টেম্পোরারি টেবিল হলো একটি অস্থায়ী টেবিল যা শুধুমাত্র SQL সেশন বা ডাটাবেস কানেকশন চলাকালীন সময়ে উপস্থিত থাকে। একবার সেশন বা কানেকশন শেষ হলে, টেম্পোরারি টেবিলটি স্বয়ংক্রিয়ভাবে মুছে যায়। টেম্পোরারি টেবিল সাধারণত ডেটা প্রক্রিয়াকরণ বা অস্থায়ী ডেটা সংরক্ষণে ব্যবহৃত হয়, যা পরে ডেটাবেসের স্থায়ী টেবিলগুলির সাথে মিশ্রিত হয়।
টেম্পোরারি টেবিল তৈরির উপায়
১. স্থানীয় টেম্পোরারি টেবিল (Local Temporary Table)
স্থানীয় টেম্পোরারি টেবিল শুধুমাত্র ব্যবহারকারী সেশনের জন্য উপলব্ধ থাকে এবং এটি # চিহ্ন দিয়ে শুরু হয়।
স্থানীয় টেম্পোরারি টেবিলের উদাহরণ:
-- টেম্পোরারি টেবিল তৈরি
CREATE TABLE #Employees
(
EmployeeID INT,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Department VARCHAR(50)
);
-- ডেটা ইনসার্ট করা
INSERT INTO #Employees (EmployeeID, FirstName, LastName, Department)
VALUES (1, 'John', 'Doe', 'HR'),
(2, 'Jane', 'Smith', 'IT'),
(3, 'Michael', 'Johnson', 'Finance');
-- টেবিল থেকে ডেটা নির্বাচন করা
SELECT * FROM #Employees;
-- টেম্পোরারি টেবিল মুছে ফেলা
DROP TABLE #Employees;
এটি #Employees নামে একটি স্থানীয় টেম্পোরারি টেবিল তৈরি করবে, এতে ডেটা ইনসার্ট করা হবে, তারপর সেই ডেটা নির্বাচন করা হবে। সেশন শেষ হলে এই টেবিলটি স্বয়ংক্রিয়ভাবে মুছে যাবে।
২. গ্লোবাল টেম্পোরারি টেবিল (Global Temporary Table)
গ্লোবাল টেম্পোরারি টেবিল সমস্ত সেশনের জন্য উপলব্ধ থাকে, তবে এটি ## চিহ্ন দিয়ে শুরু হয় এবং যখন সমস্ত সেশন থেকে এটি আর অ্যাক্সেস করা হয় না, তখন এটি মুছে যায়।
গ্লোবাল টেম্পোরারি টেবিলের উদাহরণ:
-- গ্লোবাল টেম্পোরারি টেবিল তৈরি
CREATE TABLE ##Departments
(
DepartmentID INT,
DepartmentName VARCHAR(50)
);
-- ডেটা ইনসার্ট করা
INSERT INTO ##Departments (DepartmentID, DepartmentName)
VALUES (1, 'HR'),
(2, 'IT'),
(3, 'Finance');
-- টেবিল থেকে ডেটা নির্বাচন করা
SELECT * FROM ##Departments;
-- গ্লোবাল টেম্পোরারি টেবিল মুছে ফেলা
DROP TABLE ##Departments;
এটি ##Departments নামে একটি গ্লোবাল টেম্পোরারি টেবিল তৈরি করবে এবং টেবিলের ডেটা সবার জন্য উপলব্ধ থাকবে যতক্ষণ না এটি মুছে ফেলা হয়।
টেম্পোরারি টেবিল ব্যবহার করার সুবিধা
- অস্থায়ী ডেটা সংরক্ষণ: টেম্পোরারি টেবিল অস্থায়ী ডেটা সংরক্ষণ করতে ব্যবহৃত হয়, যেমন একাধিক স্টেপে প্রক্রিয়া করা ডেটা।
- ক্লিন কোড: টেম্পোরারি টেবিল ব্যবহারের মাধ্যমে কোডের সাময়িক ডেটা একত্রিত করা সহজ হয়, যা পরে পরিস্কার করা যেতে পারে।
- পারফরম্যান্স উন্নতকরণ: বড় ডেটাসেটের সাথে কাজ করার সময়, টেম্পোরারি টেবিলগুলি কাজের গতি বৃদ্ধি করতে সাহায্য করে কারণ এতে শুধুমাত্র সেশন বা প্রসেসের জন্য প্রয়োজনীয় ডেটা থাকে।
স্বয়ংক্রিয় পরিস্কার: টেম্পোরারি টেবিলের একটি প্রধান সুবিধা হল যে সেশন বা কানেকশন শেষ হলে এটি স্বয়ংক্রিয়ভাবে পরিস্কার হয়ে যায়, ফলে ডেটাবেসে অতিরিক্ত ডেটা জমে না থাকে।
সারাংশ
টেম্পোরারি টেবিল ডেটাবেসে অস্থায়ীভাবে ডেটা সংরক্ষণ করার জন্য ব্যবহৃত হয়। এটি ডেটা প্রসেসিংয়ের জন্য খুবই কার্যকরী, এবং সেশন বা কানেকশন শেষ হলে এটি স্বয়ংক্রিয়ভাবে মুছে যায়। স্থানীয় টেম্পোরারি টেবিল শুধুমাত্র বর্তমান সেশনের জন্য ব্যবহারযোগ্য, এবং গ্লোবাল টেম্পোরারি টেবিল সমস্ত সেশনের জন্য উপলব্ধ থাকে যতক্ষণ না সব সেশন থেকে এটি সরানো না হয়।
Read more