در SQL Server، هنگام کار با دادههای موقت، دو ابزار بسیار مفید و قدرتمند در اختیار شما قرار دارد:
Temporary Tables و جدولهای متغیر (Table Variables).
این دو ابزار به شما اجازه میدهند تا دادههای موقت را بهطور موقت ذخیره و مدیریت کنید.
اگرچه هر دوی این ابزارها به نظر مشابه میآیند، اما در عمل تفاوتهای مهمی دارند که باید در نظر گرفته شوند.
در این مقاله، به بررسی این دو روش پرداخته و تفاوتها و موارد استفاده هر یک را مورد بررسی قرار میدهیم.
Temporary Tables یا جداول موقت، جداولی هستند که بهطور موقت در TempDB ایجاد میشوند و پس از پایان جلسه (Session) یا محدوده (Scope) که در آن ایجاد شدهاند، بهطور خودکار حذف میشوند.
این جداول معمولاً زمانی استفاده میشوند که نیاز دارید دادههای زیادی را در یک جلسه یا تراکنش بهطور موقت ذخیره کنید.
یکی از ویژگیهای کلیدی Temporary Tables این است که میتوانند ایندکسها (Indexes) و قیود (Constraints) را پشتیبانی کنند.
برای مثال، فرض کنید میخواهید اطلاعات مربوط به سفارشات خاصی را از دیتابیس Northwind جمعآوری کنید و سپس این دادهها را در Temporary Table ذخیره کنید تا به راحتی بتوانید با آنها کار کنید.
CREATE TABLE #TempOrders ( OrderID int, CustomerID nchar(5), OrderDate datetime ); INSERT INTO #TempOrders SELECT OrderID, CustomerID, OrderDate FROM Orders WHERE OrderDate >= '1997-01-01'; SELECT * FROM #TempOrders;
در این مثال، ابتدا یک Temporary Table به نام #TempOrders ایجاد شده است.
سپس دادههای مربوط به سفارشاتی که پس از تاریخ ۱ ژانویه ۱۹۹۷ ثبت شدهاند، در این جدول موقت ذخیره میشوند.
در نهایت، میتوانید این دادهها را از Temporary Table بهراحتی استخراج کنید.
جدولهای متغیر، جداولی هستند که بهصورت متغیرهای محلی در محدوده یک بلاک کد یا یک Stored Procedure تعریف میشوند.
این جدولها برای ذخیرهسازی دادههای کوچک و موقت بسیار مفید هستند و بر خلاف Temporary Tables، در خارج از محدودهای که در آن تعریف شدهاند، قابل دسترسی نیستند.
یکی از مزایای جدولهای متغیر نسبت به Temporary Tables این است که عملکرد آنها در حجم دادههای کوچکتر بهینهتر است.
با این حال، جدولهای متغیر محدودیتهایی دارند؛ به عنوان مثال، آنها نمیتوانند ایندکسهای غیرخودکار (Non-Clustered Indexes) داشته باشند.
برای مثال، فرض کنید که میخواهید تعداد مشخصی از محصولات را از دیتابیس Northwind انتخاب کنید و در یک جدول متغیر ذخیره کنید.
DECLARE @ProductTable TABLE ( ProductID int, ProductName nvarchar(40), UnitPrice money ); INSERT INTO @ProductTable SELECT ProductID, ProductName, UnitPrice FROM Products WHERE UnitPrice > 20.00; SELECT * FROM @ProductTable;
در این مثال، یک جدول متغیر به نام @ProductTable ایجاد شده است.
دادههای مربوط به محصولاتی که قیمت واحد آنها بیشتر از ۲۰.۰۰ است، در این جدول ذخیره میشوند.
در نهایت، این دادهها از جدول متغیر استخراج میشوند.
در حالی که هر دو روش Temporary Tables و جدولهای متغیر برای مدیریت دادههای موقت استفاده میشوند، تفاوتهای کلیدی بین آنها وجود دارد که باید در نظر گرفته شوند.
Temporary Tables برای ذخیرهسازی دادههای بزرگتر و موقت در سطح Session یا Transaction مناسبتر هستند و میتوانند از ایندکسها و قیود پشتیبانی کنند.
از طرف دیگر، جدولهای متغیر برای دادههای کوچکتر و در محدودههای محدودتری مانند داخل یک Stored Procedure یا بلاک کد مناسبتر هستند و عملکرد بهتری دارند.
با این حال، محدودیتهایی نیز دارند که باید در استفاده از آنها در نظر گرفته شود.
هنگام تصمیمگیری بین استفاده از Temporary Tables و جدولهای متغیر، باید حجم دادهها، نیاز به ایندکسها و قیود، و محدوده دسترسی را در نظر بگیرید.
در بسیاری از موارد، انتخاب مناسب بین این دو روش میتواند به بهبود عملکرد و بهینهسازی کدهای SQL شما کمک کند.
بیشتر بخوانید: