MySQL अस्थायी तालिकाएँ: उनका कार्य, लाभ, और सर्वोत्तम प्रथाएँ

目次

1. परिचय

When working with MySQL, a “temporary table” is a useful way to store and process data temporarily. By using temporary tables, you can temporarily hold data to reduce the load of complex queries and improve the efficiency of batch processing.

MySQL के साथ काम करते समय, “अस्थायी तालिका” डेटा को अस्थायी रूप से संग्रहीत और प्रोसेस करने का एक उपयोगी तरीका है। अस्थायी तालिकाओं का उपयोग करके, आप डेटा को अस्थायी रूप से रख सकते हैं जिससे जटिल क्वेरीज़ का लोड कम हो और बैच प्रोसेसिंग की दक्षता बढ़े।

In this article, we will explain what MySQL temporary tables are, along with their use cases and benefits in detail.

इस लेख में, हम MySQL अस्थायी तालिकाएँ क्या हैं, उनके उपयोग मामलों और लाभों को विस्तार से समझाएंगे।

अस्थायी तालिका क्या है?

A temporary table is a table that is valid only within a session.
Unlike regular tables, it is not stored permanently in the database, and it is automatically dropped when the session ends.

अस्थायी तालिका एक ऐसी तालिका है जो केवल एक सत्र के भीतर मान्य होती है
सामान्य तालिकाओं के विपरीत, यह डेटाबेस में स्थायी रूप से संग्रहीत नहीं होती, और यह सत्र समाप्त होने पर स्वचालित रूप से हटा दी जाती है

The key characteristics of temporary tables are as follows:

अस्थायी तालिकाओं की मुख्य विशेषताएँ इस प्रकार हैं:

  • They exist per session (not accessible from other connections)
  • They are automatically dropped when the session ends
  • They can be used without interfering even if a regular table with the same name exists
  • They are often used to improve performance

  • वे प्रत्येक सत्र के लिए मौजूद रहती हैं (अन्य कनेक्शनों से सुलभ नहीं)

  • सत्र समाप्त होने पर वे स्वचालित रूप से हटा दी जाती हैं
  • भले ही समान नाम की सामान्य तालिका मौजूद हो, वे बिना हस्तक्षेप के उपयोग की जा सकती हैं
  • वे अक्सर प्रदर्शन सुधारने के लिए उपयोग की जाती हैं

Temporary tables are well-suited for data analysis and temporary data processing, and they are commonly used as support for batch processing and aggregation tasks.

अस्थायी तालिकाएँ डेटा विश्लेषण और अस्थायी डेटा प्रोसेसिंग के लिए उपयुक्त हैं, और अक्सर बैच प्रोसेसिंग और एग्रीगेशन कार्यों के समर्थन के रूप में उपयोग की जाती हैं।

अस्थायी तालिकाओं के उपयोग के लाभ

Using temporary tables can make data processing more efficient. Here are three major benefits.

अस्थायी तालिकाओं का उपयोग डेटा प्रोसेसिंग को अधिक कुशल बना सकता है। यहाँ तीन प्रमुख लाभ हैं।

1. Improve query performance

When handling large amounts of data, using multiple JOINs and subqueries can make processing complex and increase database load. With temporary tables, you can filter and store data in advance, speeding up query execution.

जब बड़ी मात्रा में डेटा को संभालते हैं, कई JOINs और सबक्वेरीज़ का उपयोग प्रोसेसिंग को जटिल बना सकता है और डेटाबेस लोड बढ़ा सकता है। अस्थायी तालिकाओं के साथ, आप डेटा को पहले से फ़िल्टर और संग्रहीत कर सकते हैं, जिससे क्वेरी निष्पादन तेज़ हो जाता है।

2. Ideal for temporary data storage

In batch processing or data transformation, you may need to store data temporarily and perform necessary operations. Temporary tables let you store data temporarily and enable fast in-memory processing.

बैच प्रोसेसिंग या डेटा रूपांतरण में, आपको डेटा को अस्थायी रूप से संग्रहीत करने और आवश्यक संचालन करने की आवश्यकता हो सकती है। अस्थायी तालिकाएँ डेटा को अस्थायी रूप से संग्रहीत करती हैं और तेज़ इन‑मेमोरी प्रोसेसिंग को सक्षम बनाती हैं।

3. Keep existing data safe

Directly manipulating production data is risky. By using temporary tables, you can process data without changing production data and reduce the risk of errors.

उत्पादन डेटा को सीधे बदलना जोखिमपूर्ण है। अस्थायी तालिकाओं का उपयोग करके, आप उत्पादन डेटा को बदले बिना डेटा प्रोसेस कर सकते हैं और त्रुटियों के जोखिम को कम कर सकते हैं

सारांश

MySQL temporary tables are a convenient tool for temporary data storage and processing.

MySQL अस्थायी तालिकाएँ अस्थायी डेटा संग्रहण और प्रोसेसिंग के लिए एक सुविधाजनक उपकरण हैं।

  • They are session-scoped and dropped when the session ends
  • They are useful for performance improvements and batch processing
  • They allow safe operations without changing production data

  • वे सत्र-स्कोप्ड हैं और सत्र समाप्त होने पर हटा दी जाती हैं

  • वे प्रदर्शन सुधार और बैच प्रोसेसिंग के लिए उपयोगी हैं
  • वे उत्पादन डेटा बदले बिना सुरक्षित संचालन की अनुमति देती हैं

2. अस्थायी तालिका मूल बातें

MySQL temporary tables are used to store data temporarily, unlike regular tables. In this section, we will explain the basic concepts of temporary tables in detail, including “differences from regular tables” and “differences from internal temporary tables.”

MySQL अस्थायी तालिकाएँ डेटा को अस्थायी रूप से संग्रहीत करने के लिए उपयोग की जाती हैं, सामान्य तालिकाओं के विपरीत। इस भाग में, हम अस्थायी तालिकाओं की बुनियादी अवधारणाओं को विस्तार से समझाएंगे, जिसमें “सामान्य तालिकाओं से अंतर” और “आंतरिक अस्थायी तालिकाओं से अंतर” शामिल हैं।

अस्थायी तालिकाओं और सामान्य तालिकाओं के बीच अंतर

Temporary tables and regular tables differ significantly in data retention and access behavior. The table below summarizes the main differences.

अस्थायी तालिकाएँ और सामान्य तालिकाएँ डेटा रखरखाव और पहुँच व्यवहार में काफी भिन्न होती हैं। नीचे दी गई तालिका मुख्य अंतर को सारांशित करती है।

ItemTemporary TableRegular Table
LifetimeDropped when the session endsExists until explicitly dropped
AccessAvailable only within the session (not visible to other connections)Shareable across all sessions
ConflictsCan be used even if a regular table with the same name existsCannot create another table with the same name
Storage locationMEMORY (default) or an InnoDB temporary areaStored in the database storage
PersistenceNone (dropped when the session ends)Yes (retained by the database)

मुख्य बिंदु

  • Temporary tables are isolated per session and are not visible to other users.
  • You can create them without error even if a regular table with the same name exists .
  • They are created explicitly using CREATE TEMPORARY TABLE and are automatically dropped when the session ends .

  • अस्थायी तालिकाएँ प्रत्येक सत्र के लिए अलग होती हैं और अन्य उपयोगकर्ताओं को दिखाई नहीं देतीं।

  • यदि समान नाम की सामान्य तालिका मौजूद हो तो भी आप उन्हें बिना त्रुटि के बना सकते हैं
  • वे स्पष्ट रूप से CREATE TEMPORARY TABLE का उपयोग करके बनाई जाती हैं और सत्र समाप्त होने पर स्वचालित रूप से हटा दी जाती हैं

अस्थायी तालिकाओं और आंतरिक अस्थायी तालिकाओं के बीच अंतर

In addition to user-created temporary tables, MySQL also creates internal temporary tables automatically. They may sound similar, but their purposes and management differ.

उपयोगकर्ता‑निर्मित अस्थायी तालिकाओं के अतिरिक्त, MySQL स्वचालित रूप से आंतरिक अस्थायी तालिकाएँ भी बनाता है। वे समान लग सकती हैं, लेकिन उनके उद्देश्य और प्रबंधन अलग हैं।

ItemTemporary TableInternal Temporary Table
Creation methodExplicitly created using CREATE TEMPORARY TABLEAutomatically created by MySQL
PurposeCreated by the user for specific processingCreated by MySQL to process complex queries (GROUP BY, ORDER BY)
ScopeAvailable only within the sessionValid only while the query is executing
DeletionDropped when the session endsAutomatically dropped after the query completes

आंतरिक अस्थायी तालिका क्या है?

  • MySQL may internally create temporary tables to optimize certain queries (such as GROUP BY , ORDER BY , DISTINCT ).
  • End users cannot manage them directly (you cannot explicitly create them like CREATE TEMPORARY TABLE ).
  • They are created as needed during query execution and are automatically dropped when the query completes .

  • MySQL कुछ क्वेरीज़ (जैसे GROUP BY, ORDER BY, DISTINCT) को अनुकूलित करने के लिए आंतरिक रूप से अस्थायी तालिकाएँ बना सकता है

  • अंत उपयोगकर्ता उन्हें सीधे प्रबंधित नहीं कर सकते (आप CREATE TEMPORARY TABLE की तरह स्पष्ट रूप से नहीं बना सकते)।
  • वे क्वेरी निष्पादन के दौरान आवश्यकता अनुसार बनती हैं और क्वेरी समाप्त होने पर स्वचालित रूप से हटा दी जाती हैं

आंतरिक अस्थायी तालिकाओं को ट्रिगर करने वाला उदाहरण

When you run a query like the following, MySQL may create an internal temporary table to process it.

जब आप नीचे दी गई क्वेरी चलाते हैं, तो MySQL इसे प्रोसेस करने के लिए एक आंतरिक अस्थायी तालिका बना सकता है।

SELECT category, COUNT(*) 
FROM products 
GROUP BY category
ORDER BY COUNT(*) DESC;

इस मामले में, MySQL एक आंतरिक अस्थायी तालिका बना सकता है जो GROUP BY परिणामों को अस्थायी रूप से संग्रहीत करती है,
और फिर इसे अंतिम आउटपुट की गणना के लिए उपयोग करता है।

Summary

  • एक अस्थायी तालिका उपयोगकर्ता द्वारा बनाई गई अस्थायी तालिका है जो सत्र समाप्त होने पर स्वचालित रूप से हटा दी जाती है।
  • सामान्य तालिकाओं के विपरीत, इसे अन्य सत्रों से एक्सेस नहीं किया जा सकता
  • आंतरिक अस्थायी तालिका MySQL द्वारा स्वचालित रूप से बनाई और हटाई जाती है, और उपयोगकर्ता इसे सीधे नियंत्रित नहीं कर सकते।

3. अस्थायी तालिकाएँ कैसे बनाएं

आप CREATE TEMPORARY TABLE कथन का उपयोग करके MySQL अस्थायी तालिका बना सकते हैं। इस अनुभाग में, हम बुनियादी निर्माण से लेकर मौजूदा तालिका पर आधारित एक तालिका बनाने तक सब कुछ समझाते हैं।

अस्थायी तालिका बनाने का बुनियादी तरीका

MySQL में, आप CREATE TEMPORARY TABLE का उपयोग करके एक अस्थायी तालिका बनाते हैं।

Basic syntax

CREATE TEMPORARY TABLE table_name (
    column_name data_type constraints,
    column_name data_type constraints,
    ...
);

उदाहरण कोड

निम्नलिखित SQL users_temp नाम की एक अस्थायी तालिका बनाता है जिसमें तीन कॉलम हैं: id (पूर्णांक), name (स्ट्रिंग), और email (स्ट्रिंग)।

CREATE TEMPORARY TABLE users_temp (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    email VARCHAR(100)
);

क्योंकि यह तालिका सत्र समाप्त होने पर स्वचालित रूप से हटा दी जाती है, यह स्थायी डेटाबेस को प्रभावित नहीं करती

मौजूदा तालिका पर आधारित अस्थायी तालिका बनाना

शुरू से अस्थायी तालिका बनाने के बजाय, आप मौजूदा तालिका की संरचना को कॉपी करके भी एक बना सकते हैं।

CREATE TEMPORARY TABLE ... SELECT का उपयोग करके

MySQL में, आप SELECT कथन के परिणाम के आधार पर एक अस्थायी तालिका बना सकते हैं।

Basic syntax

CREATE TEMPORARY TABLE temp_table_name
SELECT * FROM existing_table_name;

उदाहरण कोड

उदाहरण के लिए, users तालिका की डेटा संरचना को कॉपी करके नई अस्थायी तालिका users_temp बनाने के लिए, आप लिख सकते हैं:

CREATE TEMPORARY TABLE users_temp
SELECT * FROM users;

इस विधि से, users की कॉलम संरचना users_temp में ले जाई जाती है, लेकिन PRIMARY KEY और INDEX जैसी बाधाएँ कॉपी नहीं होतीं

यदि आप केवल तालिका संरचना को डेटा के बिना कॉपी करना चाहते हैं, तो WHERE 1=0 जोड़ें।

CREATE TEMPORARY TABLE users_temp
SELECT * FROM users WHERE 1=0;

इस SQL के साथ, users की कॉलम परिभाषाएँ कॉपी हो जाती हैं, लेकिन कोई डेटा शामिल नहीं होता।

अस्थायी तालिकाएँ बनाते समय नोट्स

1. अस्थायी तालिकाएँ सत्र-स्कोप्ड होती हैं

  • एक अस्थायी तालिका केवल उसी सत्र में मान्य होती है जिसमें इसे बनाया गया था।
  • इसे अन्य कनेक्शनों या अन्य उपयोगकर्ताओं द्वारा एक्सेस नहीं किया जा सकता।

2. आप इसे बना सकते हैं भले ही समान नाम की सामान्य तालिका मौजूद हो

  • उदाहरण के लिए, यदि डेटाबेस में users नाम की सामान्य तालिका मौजूद है, तब भी आप users नाम की अस्थायी तालिका बना सकते हैं।
  • उस सत्र में, अस्थायी तालिका को प्राथमिकता मिलती है और सामान्य तालिका छिपी रहती है।

3. स्टोरेज इंजन का प्रभाव

  • डिफ़ॉल्ट रूप से, अस्थायी तालिकाएँ MEMORY इंजन का उपयोग करती हैं, लेकिन यदि डेटा आकार बड़ा हो तो वे InnoDB अस्थायी क्षेत्र में संग्रहीत हो सकती हैं।
  • यदि आप स्पष्ट रूप से MEMORY इंजन निर्दिष्ट करना चाहते हैं, तो इसे इस प्रकार लिखें: CREATE TEMPORARY TABLE users_temp ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) ) ENGINE=MEMORY;
  • MEMORY इंजन तेज़ है लेकिन डेटा आकार की सीमाएँ रखता है। बड़े डेटासेट के लिए, InnoDB का उपयोग करने पर विचार करें।

सारांश

  • CREATE TEMPORARY TABLE का उपयोग करके अस्थायी तालिकाएँ बनाएं।
  • आप मौजूदा तालिका को कॉपी करके भी एक बना सकते हैं (SELECT * FROM)।
  • MEMORY इंजन तेज़ हो सकता है, लेकिन बड़े डेटासेट के लिए अक्सर InnoDB बेहतर होता है।
  • अस्थायी तालिकाएँ प्रत्येक सत्र के अनुसार प्रबंधित होती हैं और सत्र समाप्त होने पर स्वचालित रूप से हटा दी जाती हैं

4. अस्थायी तालिकाओं का उपयोग कैसे करें

MySQL अस्थायी तालिकाओं को सामान्य तालिकाओं की तरह संचालित किया जा सकता है, जिसमें INSERT, UPDATE, DELETE, और SELECT शामिल हैं। इस खंड में, हम प्रत्येक संचालन की विस्तार से व्याख्या करते हैं।

डेटा सम्मिलित करना

अस्थायी तालिका में डेटा जोड़ने के लिए, सामान्य INSERT INTO स्टेटमेंट का उपयोग करें।

मूल सिंटैक्स

INSERT INTO temp_table_name (column1, column2, ...)
VALUES (value1, value2, ...);

नमूना कोड

निम्नलिखित SQL users_temp नामक अस्थायी तालिका में डेटा सम्मिलित करता है।

INSERT INTO users_temp (id, name, email)
VALUES (1, 'Taro Yamada', 'taro@example.com');

आप मौजूदा तालिका से डेटा कॉपी और सम्मिलित भी कर सकते हैं।

INSERT INTO users_temp (id, name, email)
SELECT id, name, email FROM users WHERE age >= 18;

यह SQL users तालिका से 18 वर्ष या उससे अधिक आयु के उपयोगकर्ताओं के लिए डेटा को अस्थायी तालिका में सम्मिलित करता है।

डेटा अपडेट करना

अस्थायी तालिका में डेटा संशोधित करने के लिए, सामान्य UPDATE स्टेटमेंट का उपयोग करें।

मूल सिंटैक्स

UPDATE temp_table_name
SET column_name = new_value
WHERE condition;

नमूना कोड

उदाहरण के लिए, users_temp तालिका में id=1 वाले उपयोगकर्ता का नाम बदलने के लिए:

UPDATE users_temp
SET name = 'Ichiro Sato'
WHERE id = 1;

डेटा हटाना

अनावश्यक डेटा हटाने के लिए, DELETE स्टेटमेंट का उपयोग करें।

मूल सिंटैक्स

DELETE FROM temp_table_name WHERE condition;

नमूना कोड

उदाहरण के लिए, users_temp से id=1 वाली पंक्ति हटाने के लिए:

DELETE FROM users_temp WHERE id = 1;

तालिका में सभी डेटा हटाने के लिए, WHERE क्लॉज को छोड़ दें।

DELETE FROM users_temp;

ध्यान दें कि DELETE का उपयोग करने से तालिका स्वयं ड्रॉप नहीं होती; यह केवल डेटा हटाता है।

डेटा चुनना

अस्थायी तालिका में संग्रहीत डेटा प्राप्त करने के लिए, SELECT स्टेटमेंट का उपयोग करें।

मूल सिंटैक्स

SELECT column_name FROM temp_table_name WHERE condition;

नमूना कोड

उदाहरण के लिए, users_temp से सभी डेटा प्राप्त करने के लिए:

SELECT * FROM users_temp;

विशिष्ट शर्त से मेल खाने वाले डेटा को प्राप्त करने के लिए, WHERE क्लॉज का उपयोग करें।

SELECT * FROM users_temp WHERE email LIKE '%@example.com';

यह SQL केवल उन पंक्तियों को प्राप्त करता है जहां ईमेल पता @example.com शामिल है।

अस्थायी तालिकाओं का उपयोग करते समय नोट्स

1. सत्र समाप्त होने पर डेटा हट जाता है

  • अस्थायी तालिकाएं सत्र प्रति प्रबंधित की जाती हैं, और उनका डेटा भी सत्र समाप्त होने पर हटा दिया जाता है
  • लंबे समय तक चलने वाली प्रोसेसिंग के लिए, डेटा को नियमित रूप से बैकअप करने की सिफारिश की जाती है

2. समान नाम से अस्थायी तालिका बनाने पर त्रुटि होती है

  • यदि आप CREATE TEMPORARY TABLE का उपयोग करके समान नाम से अस्थायी तालिका बनाने का प्रयास करते हैं, तो त्रुटि होती है
  • त्रुटि से बचाव के दृष्टिकोण के रूप में, पहले DROP TEMPORARY TABLE IF EXISTS चलाएं। DROP TEMPORARY TABLE IF EXISTS users_temp; CREATE TEMPORARY TABLE users_temp (...);

3. स्टोरेज इंजन प्रतिबंध

  • अस्थायी तालिकाएं डिफ़ॉल्ट रूप से MEMORY इंजन का उपयोग करती हैं, लेकिन बड़े डेटासेट को स्वचालित रूप से InnoDB अस्थायी क्षेत्र में संग्रहीत किया जा सकता है।
  • बड़े डेटासेट के लिए, InnoDB अस्थायी तालिका का उपयोग करने की सिफारिश की जाती है

सारांश

  • अस्थायी तालिकाएं सामान्य तालिकाओं की तरह INSERT, UPDATE, DELETE, और SELECT कर सकती हैं।
  • सत्र समाप्त होने पर, अस्थायी तालिका में डेटा भी स्वचालित रूप से हटा दिया जाता है
  • पहले DROP TEMPORARY TABLE IF EXISTS चलाने से नाम-संघर्ष त्रुटियों से बचाव होता है।
  • बड़े डेटासेट के लिए, InnoDB अस्थायी तालिका का उपयोग करने की सिफारिश की जाती है

5. अस्थायी तालिकाओं का प्रबंधन और ड्रॉप करना

MySQL अस्थायी तालिकाएं सत्र समाप्त होने पर स्वचालित रूप से ड्रॉप हो जाती हैं। हालांकि, कुछ मामलों में आपको उन्हें स्पष्ट रूप से ड्रॉप करने की आवश्यकता हो सकती है। इस खंड में, हम अस्थायी तालिकाओं को प्रबंधित और ड्रॉप करने के तरीके की व्याख्या करते हैं।

अस्थायी तालिका को ड्रॉप करने का तरीका

अस्थायी तालिका को स्पष्ट रूप से ड्रॉप करने के लिए, DROP TEMPORARY TABLE स्टेटमेंट का उपयोग करें।

मूल सिंटैक्स

DROP TEMPORARY TABLE table_name;

नमूना कोड

उदाहरण के लिए, users_temp नामक एक अस्थायी तालिका को हटाने के लिए, चलाएं:

DROP TEMPORARY TABLE users_temp;

इस SQL को चलाने के बाद, users_temp तालिका हटा दी जाती है और सत्र में इसका उपयोग अब नहीं किया जा सकता।

सत्र समाप्त होने पर स्वचालित हटाना

एक अस्थायी तालिका सत्र समाप्त होने पर स्वचालित रूप से हटा दी जाती है।

स्वचालित हटाना कैसे काम करता है

  1. CREATE TEMPORARY TABLE के साथ एक अस्थायी तालिका बनाएं
  2. सत्र सक्रिय रहते हुए उसके डेटा पर संचालन करें
  3. जब सत्र (कनेक्शन) बंद हो जाता है, तो अस्थायी तालिका स्वचालित रूप से हटा दी जाती है

हालांकि, निम्नलिखित मामलों में सावधान रहें:

  • जब सत्र लंबे समय तक खुले रहते हैं → अनावश्यक अस्थायी तालिकाएं स्मृति का उपभोग कर सकती हैं, इसलिए आवश्यकतानुसार DROP TEMPORARY TABLE चलाने की सिफारिश की जाती है।
  • जब बड़ी मात्रा में डेटा संभाला जा रहा हो → भंडारण दबाव से बचने के लिए, तालिकाओं को उचित रूप से हटाना महत्वपूर्ण है।

DROP TEMPORARY TABLE IF EXISTS का उपयोग

जब तालिका मौजूद न हो तो त्रुटि से बचने के लिए, आप IF EXISTS का उपयोग कर सकते हैं।

मूल सिंटैक्स

DROP TEMPORARY TABLE IF EXISTS table_name;

नमूना कोड

DROP TEMPORARY TABLE IF EXISTS users_temp;

यह SQL users_temp को हटा देता है यदि यह मौजूद है; यदि यह मौजूद नहीं है, तो यह त्रुटि नहीं उत्पन्न करेगा।

सामान्य त्रुटियां और समाधान

त्रुटि 1: “Table not found”

जब यह होता है:

  • जब आप DROP TEMPORARY TABLE का उपयोग करके एक ऐसी तालिका को हटाने का प्रयास करते हैं जो मौजूद नहीं है
  • क्योंकि अस्थायी तालिकाएं सत्र-स्कोप्ड होती हैं, आप उन्हें किसी अन्य सत्र से हटा नहीं सकते

समाधान:

  • त्रुटि से बचने के लिए IF EXISTS जोड़ें
    DROP TEMPORARY TABLE IF EXISTS users_temp;
    
  • इसे सही सत्र के अंदर हटाएं

त्रुटि 2: “Table already exists”

जब यह होता है:

  • जब आप एक ऐसे नाम से अस्थायी तालिका बनाने का प्रयास करते हैं जो पहले से मौजूद है

समाधान:

  • पहले DROP TEMPORARY TABLE IF EXISTS चलाएं
    DROP TEMPORARY TABLE IF EXISTS users_temp;
    CREATE TEMPORARY TABLE users_temp (
        id INT PRIMARY KEY,
        name VARCHAR(50),
        email VARCHAR(100)
    );
    

अस्थायी तालिकाओं के प्रबंधन के लिए सर्वोत्तम अभ्यास

  1. जब आपको उनकी आवश्यकता न हो तो उन्हें स्पष्ट रूप से हटाएं
  • अनावश्यक तालिकाओं को मुक्त करने के लिए आवश्यकतानुसार DROP TEMPORARY TABLE चलाएं।
  1. त्रुटियों से बचने के लिए IF EXISTS का उपयोग करें
  • DROP TEMPORARY TABLE IF EXISTS एक ऐसी तालिका को हटाते समय त्रुटियों को रोकता है जो मौजूद नहीं है।
  1. सत्र प्रबंधन का ध्यान रखें
  • लंबे समय तक चलने वाले सत्र अस्थायी तालिकाओं के कारण स्मृति का उपभोग कर सकते हैं, इसलिए उन्हें उचित रूप से हटाएं।
  1. भंडारण इंजन के प्रभाव को समझें
  • MEMORY इंजन तेज है लेकिन डेटा आकार की सीमाएं हैं।
  • यदि आप InnoDB का उपयोग करते हैं, तो आपको डिस्क स्थान उपयोग पर विचार करना चाहिए।

सारांश

  • आप DROP TEMPORARY TABLE का उपयोग करके अस्थायी तालिकाओं को स्पष्ट रूप से हटा सकते हैं।
  • वे सत्र समाप्त होने पर स्वचालित रूप से हटा दिए जाते हैं, लेकिन लंबे समय तक चलने वाले सत्रों के लिए, मैनुअल सफाई की सिफारिश की जाती है।
  • DROP TEMPORARY TABLE IF EXISTS हटाते समय त्रुटियों को रोकने में मदद करता है।
  • “Table not found” और “Table already exists” त्रुटियों को संभालने का तरीका जानना उपयोगी है।

6. अस्थायी तालिकाओं के लिए व्यावहारिक उपयोग के मामले

MySQL अस्थायी तालिकाएं अस्थायी डेटा भंडारण और प्रसंस्करण को अधिक कुशल बनाने के लिए उपयोग की जाती हैं। इस खंड में, हम उन सामान्य परिदृश्यों का परिचय देते हैं जहां अस्थायी तालिकाएं उपयोगी हैं और कार्यान्वयन विवरण समझाते हैं।

1. एग्रीगेशन के लिए मध्यवर्ती तालिका के रूप में उपयोग

डेटा विश्लेषण और रिपोर्ट जनरेशन में, बड़े डेटासेट को सीधे संसाधित करना क्वेरी निष्पादन को धीमा कर सकता है। अस्थायी तालिका का उपयोग करके, आप पहले डेटा को व्यवस्थित कर सकते हैं और फिर इसे संसाधित कर सकते हैं, जिससे प्रदर्शन में सुधार होता है।

परिदृश्य

  • sales तालिका में एक वर्ष का बिक्री डेटा होता है।
  • आप मासिक कुल बिक्री की गणना करना चाहते हैं और आगे विश्लेषण करना चाहते हैं।

उदाहरण कार्यान्वयन

CREATE TEMPORARY TABLE monthly_sales (
    month_year DATE,
    total_sales DECIMAL(10,2)
);

INSERT INTO monthly_sales (month_year, total_sales)
SELECT DATE_FORMAT(sale_date, '%Y-%m-01') AS month_year, SUM(amount) 
FROM sales
GROUP BY month_year;

SELECT * FROM monthly_sales;

2. Keeping temporary data for batch processing

Temporary tables are also useful for batch processing (bulk operations). For example, you can filter data by certain conditions and store only the target data in a temporary table to operate efficiently.

Scenario

  • From the users table, you want to email only users who have logged in within the last year .
  • You store the target data in a temporary table first, then process it sequentially.

Example implementation

CREATE TEMPORARY TABLE active_users (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(255)
);

INSERT INTO active_users
SELECT id, name, email FROM users WHERE last_login >= NOW() - INTERVAL 1 YEAR;

SELECT * FROM active_users;

3. Simplifying complex queries

Running complex queries directly can reduce performance and hurt readability. By using temporary tables, you can reduce subqueries and keep SQL simpler.

Scenario

  • You want to get the top 10 best-selling products from the orders table.
  • You want to avoid using subqueries by leveraging a temporary table.

Example implementation

CREATE TEMPORARY TABLE top_products AS
SELECT product_id, SUM(amount) AS total_sales
FROM orders
GROUP BY product_id
ORDER BY total_sales DESC
LIMIT 10;

SELECT * FROM top_products;

4. Temporary operations without needing rollback

Temporary tables are managed per session and are not affected by transactions. This makes them suitable for managing temporary data where rollback is not desired.

Scenario

  • During a transaction, you want to keep temporary calculation results .
  • But you want to avoid temporary data being rolled back on errors.

Example implementation

START TRANSACTION;

CREATE TEMPORARY TABLE temp_results (
    user_id INT,
    score INT
);

INSERT INTO temp_results
SELECT user_id, SUM(points) FROM game_scores GROUP BY user_id;

-- Commit the transaction
COMMIT;

SELECT * FROM temp_results;

Summary

  • Temporary tables can be used for aggregation, batch processing, and simplifying queries across many scenarios.
  • Using them as an intermediate table can improve performance and help organize data.
  • For batch processing , pre-extracting only target data helps avoid unnecessary work.
  • For simplifying complex queries , reducing subqueries improves readability.
  • Because they are not affected by transactions , they can be used for temporary data where rollback is not needed.

7. Alternatives and Limitations of Temporary Tables

MySQL temporary tables are useful, but they have some limitations. In some cases, using alternatives such as views or subqueries can provide more efficient data processing. In this section, we explain the main limitations of temporary tables and alternative approaches to work around them.

Main limitations of temporary tables

Temporary tables have several limitations that regular tables do not. Understanding these helps you choose appropriate use cases.

1. Session-scoped

  • A temporary table is valid only within the session where it was created, and cannot be accessed by other connections or users .
  • Even if a regular table with the same name exists, the temporary table takes precedence within the session (the regular table is not accessible).

2. The schema is not retained

  • Regular tables can be inspected with SHOW CREATE TABLE , but a temporary table disappears when the session ends , so its schema is not retained.

3. Index limitations

  • यदि आप CREATE TEMPORARY TABLE में PRIMARY KEY या INDEX निर्दिष्ट नहीं करते हैं, तो वे स्वचालित रूप से नहीं बनते हैं।
  • यदि आपको अस्थायी तालिका पर इंडेक्स की आवश्यकता है, तो आपको उन्हें मैन्युअल रूप से बनाना होगा।

4. डिफ़ॉल्ट स्टोरेज इंजन MEMORY है

  • MEMORY इंजन के साथ, बड़े डेटा आकार डिस्क पर स्वैपिंग का कारण बन सकते हैं और प्रदर्शन को घटा सकते हैं
  • यदि आप InnoDB निर्दिष्ट करते हैं, तो यह बड़े डेटा को संभाल सकता है, लेकिन डिस्क उपयोग बढ़ जाता है।

5. लेनदेन द्वारा प्रभावित नहीं

  • अस्थायी तालिकाएँ ROLLBACK द्वारा प्रभावित नहीं होतीं
  • इसलिए, वे सख्त लेनदेनात्मक स्थिरता की आवश्यकता वाले प्रोसेसिंग के लिए उपयुक्त नहीं हैं।

अस्थायी तालिकाओं के विकल्प

इन सीमाओं से बचने के लिए, आप अधिक लचीले डेटा हैंडलिंग के लिए अस्थायी तालिकाओं के बजाय व्यूज़ या सबक्वेरीज़ का उपयोग कर सकते हैं।

1. व्यू का उपयोग करें

व्यू को अस्थायी डेटा संदर्भ के लिए अस्थायी तालिकाओं की तरह ही उपयोग किया जा सकता है। एक व्यू एक वर्चुअल तालिका के रूप में कार्य करता है और अस्थायी डेटा स्टोरेज की आवश्यकता नहीं रखता, जिससे स्टोरेज प्रतिबंधों से बचा जा सकता है।

व्यू बनाएं

CREATE VIEW active_users AS
SELECT id, name, email FROM users WHERE last_login >= NOW() - INTERVAL 1 YEAR;

व्यू का उपयोग करें

SELECT * FROM active_users;
व्यू के उपयोग के लाभ

कोई स्टोरेज उपयोग नहीं (डेटा सीधे संदर्भित किया जाता है, अस्थायी रूप से संग्रहीत करने की आवश्यकता नहीं)
सेशन-निर्भर नहीं (अन्य उपयोगकर्ताओं और कनेक्शनों के लिए उपलब्ध)
स्कीमा बरकरार रखा जा सकता है (आप SHOW CREATE VIEW के साथ परिभाषा की समीक्षा कर सकते हैं)

व्यू के उपयोग के नुकसान

अपडेट करना कठिन (व्यू पर सीधे INSERT या UPDATE प्रतिबंधित है)
बड़े डेटासेट के लिए प्रदर्शन घट सकता है

2. सबक्वेरी का उपयोग करें

आप सबक्वेरी का उपयोग करके अस्थायी डेटा को प्रोसेस कर सकते हैं बिना अस्थायी तालिका बनाए।

अस्थायी तालिका का उपयोग

CREATE TEMPORARY TABLE top_products AS
SELECT product_id, SUM(amount) AS total_sales
FROM orders
GROUP BY product_id
ORDER BY total_sales DESC
LIMIT 10;

SELECT * FROM top_products;

सबक्वेरी का उपयोग

SELECT product_id, SUM(amount) AS total_sales
FROM orders
GROUP BY product_id
ORDER BY total_sales DESC
LIMIT 10;
सबक्वेरी के उपयोग के लाभ

बेहतर प्रदर्शन क्योंकि आप अस्थायी तालिका नहीं बनाते
कोई स्टोरेज उपयोग नहीं
सेशन-निर्भर नहीं और कभी भी निष्पादित किया जा सकता है

सबक्वेरी के उपयोग के नुकसान

जटिल क्वेरीज़ के लिए पठनीयता घट सकती है
डेटा को पुन: उपयोग करना कठिन (आपको एक ही डेटा को बार-बार संदर्भित करने की आवश्यकता पड़ सकती है)

3. CTE (WITH क्लॉज़) का उपयोग करें

MySQL 8.0 और बाद के संस्करणों में, आप CTE (कॉमन टेबल एक्सप्रेशन) का उपयोग करके डेटा को अस्थायी रूप से संभाल सकते हैं बिना अस्थायी तालिका बनाए।

CTE उदाहरण

WITH top_products AS (
    SELECT product_id, SUM(amount) AS total_sales
    FROM orders
    GROUP BY product_id
    ORDER BY total_sales DESC
    LIMIT 10
)
SELECT * FROM top_products;
CTE के उपयोग के लाभ

पठनीयता में सुधार (अक्सर सबक्वेरीज़ की तुलना में पढ़ना आसान)
प्रदर्शन को अनुकूलित कर सकता है (अस्थायी-शैली प्रोसेसिंग बिना अस्थायी तालिका बनाए)

CTE के उपयोग के नुकसान

MySQL 5.x में उपलब्ध नहीं (केवल MySQL 8.0 और बाद में समर्थित)

सारांश

MethodProsCons
Temporary tableGood for session-scoped data processingConsumes storage and disappears when the session ends
ViewNo storage usage, not session-dependentHard to update, possible performance degradation
SubqueryNo storage usage, simpleHard to reuse, reduced readability
CTE (WITH)Better readability, performance optimizationAvailable only in MySQL 8.0+

8. अक्सर पूछे जाने वाले प्रश्न

यहाँ MySQL अस्थायी तालिकाओं के बारे में अक्सर पूछे जाने वाले प्रश्न हैं। हमें आशा है कि यह उनके व्यवहार और सीमाओं को स्पष्ट करने में मदद करेगा।

1. क्या अस्थायी तालिकाओं को अन्य सत्रों से संदर्भित किया जा सकता है?

नहीं, नहीं कर सकते।
एक अस्थायी तालिका केवल उसी सत्र में उपलब्ध होती है जिसमें इसे बनाया गया था। अन्य सत्र इसे एक्सेस नहीं कर सकते। भले ही कोई अन्य उपयोगकर्ता समान नाम की अस्थायी तालिका बनाए, प्रत्येक सत्र इसे एक स्वतंत्र तालिका के रूप में मानता है।

2. अस्थायी तालिकाएँ बनाने के लिए कौन से अधिकार आवश्यक हैं?

अस्थायी तालिकाएँ बनाने के लिए, आपको डेटाबेस पर CREATE TEMPORARY TABLES अधिकार की आवश्यकता होती है।
किसी उपयोगकर्ता को यह अधिकार देने के लिए, निम्नलिखित SQL चलाएँ:

GRANT CREATE TEMPORARY TABLES ON database_name.* TO 'user_name'@'host';

आप वर्तमान अधिकारों को SHOW GRANTS का उपयोग करके भी जांच सकते हैं।

SHOW GRANTS FOR 'user_name'@'host';

3. क्या अस्थायी तालिकाएँ डिस्क उपयोग को प्रभावित करती हैं?

हाँ, वे कर सकती हैं।
डिफ़ॉल्ट रूप से, MySQL अस्थायी तालिकाएँ MEMORY इंजन का उपयोग करती हैं, लेकिन जब डेटा का आकार किसी निश्चित सीमा से अधिक हो जाता है, तो वे InnoDB अस्थायी क्षेत्र में संग्रहीत हो जाती हैं

बड़े डेटा सेटों के साथ काम करते समय, अस्थायी तालिकाएँ डिस्क स्थान ले सकती हैं। इसलिए, जब उनकी अब आवश्यकता न रहे तो उन्हें स्पष्ट रूप से हटाना अनुशंसित है

DROP TEMPORARY TABLE IF EXISTS table_name;

डिस्क प्रभाव को कम करने के लिए, यदि आप बड़े डेटा वॉल्यूम की अपेक्षा करते हैं, तो MEMORY के बजाय InnoDB के साथ अस्थायी तालिका बनाने पर विचार करें।

CREATE TEMPORARY TABLE table_name (
    column1 data_type,
    column2 data_type
) ENGINE=InnoDB;

4. अस्थायी तालिका और आंतरिक अस्थायी तालिका में क्या अंतर है?

ItemTemporary tableInternal temporary table
Creation methodCreated by the user with CREATE TEMPORARY TABLEAutomatically created by MySQL during processing such as GROUP BY
ScopeOnly within the creating sessionOnly during query execution
DeletionExplicitly dropped with DROP TEMPORARY TABLEAutomatically dropped when the query completes

5. क्या अस्थायी तालिकाएँ थ्रेड्स के बीच साझा की जा सकती हैं?

नहीं, वे नहीं कर सकतीं।
एक अस्थायी तालिका केवल उस थ्रेड (सेशन) के भीतर मान्य होती है जहाँ इसे बनाया गया था, और इसे अन्य थ्रेड्स या प्रक्रियाओं से एक्सेस नहीं किया जा सकता।

यदि आपको सत्रों/थ्रेड्स के बीच डेटा साझा करने की आवश्यकता है, तो आपको इसके बजाय एक सामान्य तालिका बनानी होगी।

CREATE TABLE shared_temp_table (
    id INT PRIMARY KEY,
    data VARCHAR(255)
);

6. क्या अस्थायी तालिकाएँ प्रदर्शन को घटा सकती हैं?

हाँ, कुछ मामलों में।
विशेष रूप से, निम्नलिखित स्थितियों में सावधान रहें:

  • जब डेटा वॉल्यूम बहुत बड़ा हो
  • MEMORY इंजन की आकार सीमा होती है; इसके बाद डेटा InnoDB में स्वैप हो सकता है, जो प्रदर्शन को घटा सकता है
  • उपाय: यदि आप MEMORY सीमा से अधिक होने की उम्मीद करते हैं, तो शुरू से ही तालिका InnoDB के साथ बनाएँ।
  • जब उपयुक्त इंडेक्स सेट नहीं होते
  • CREATE TEMPORARY TABLE ... SELECT के साथ बनाई गई तालिकाएँ इंडेक्स कॉपी नहीं करतीं, इसलिए खोजें धीमी हो सकती हैं.
  • उपाय: आवश्यकतानुसार ALTER TABLE का उपयोग करके इंडेक्स जोड़ें।
    ALTER TABLE temp_table_name ADD INDEX (column_name);
    

7. मैं अस्थायी तालिका के प्रदर्शन को कैसे सुधार सकता हूँ?

अस्थायी तालिका के प्रदर्शन को सुधारने के लिए, निम्नलिखित उपाय प्रभावी हैं:

MEMORY इंजन का उपयोग करें (छोटे डेटा सेटों के लिए तेज़)

CREATE TEMPORARY TABLE table_name (
    id INT PRIMARY KEY,
    name VARCHAR(50)
) ENGINE=MEMORY;

केवल आवश्यक कॉलम चुनें (अनावश्यक कॉलम को छोड़ें)

CREATE TEMPORARY TABLE users_temp AS
SELECT id, name FROM users;

उपयुक्त इंडेक्स जोड़ें (खोज को तेज़ करें)

ALTER TABLE users_temp ADD INDEX (name);

जब इसकी अब आवश्यकता न रहे तो तुरंत हटाएँ (मेमोरी मुक्त करें)

DROP TEMPORARY TABLE IF EXISTS users_temp;

सारांश

  • अस्थायी तालिकाओं को अन्य सत्रों या थ्रेड्स से संदर्भित नहीं किया जा सकता
  • उन्हें बनाने के लिए आपको CREATE TEMPORARY TABLES अधिकार चाहिए
  • यदि डेटा बहुत बड़ा हो जाता है, तो MySQL MEMORY से InnoDB में स्विच कर सकता है, जिससे प्रदर्शन घट सकता है
  • उचित इंडेक्स जोड़ने से क्वेरीज़ तेज़ हो सकती हैं
  • जब अस्थायी तालिकाओं की अब आवश्यकता न रहे, तो DROP TEMPORARY TABLE के साथ उन्हें हटाना अनुशंसित है

यह MySQL अस्थायी तालिकाओं का विस्तृत विवरण समाप्त करता है, मूल अवधारणाओं से लेकर उपयोग मामलों, सीमाओं, विकल्पों और अक्सर पूछे जाने वाले प्रश्नों तक।
अस्थायी तालिकाओं का उचित उपयोग करके, आप डेटा प्रोसेसिंग की दक्षता को काफी हद तक सुधार सकते हैं।