- 1 1. Úvod
- 2 2. Základy dočasných tabulek
- 3 3. Jak vytvořit dočasné tabulky
- 4 4. Jak používat dočasné tabulky
- 5 5. Managing and Dropping Temporary Tables
- 6 6. Practical Use Cases for Temporary Tables
- 7 7. Alternatives and Limitations of Temporary Tables
- 8 8. Často kladené otázky
- 8.1 1. Lze dočasné tabulky odkazovat z jiných relací?
- 8.2 2. Jaká oprávnění jsou vyžadována pro vytvoření dočasných tabulek?
- 8.3 3. Ovlivňují dočasné tabulky využití disku?
- 8.4 4. Jaký je rozdíl mezi dočasnou tabulkou a interní dočasnou tabulkou?
- 8.5 5. Mohou být dočasné tabulky sdíleny mezi vlákny?
- 8.6 6. Mohou dočasné tabulky snižovat výkon?
- 8.7 7. Jak mohu zlepšit výkon dočasných tabulek?
- 8.8 Shrnutí
1. Úvod
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.
In this article, we will explain what MySQL temporary tables are, along with their use cases and benefits in detail.
Co je dočasná tabulka?
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) → Existují v rámci relace (nejsou přístupné z jiných spojení)
- They are automatically dropped when the session ends → Jsou automaticky odstraněny po ukončení relace
- They can be used without interfering even if a regular table with the same name exists → Lze je použít bez kolize, i když existuje běžná tabulka se stejným názvem
- They are often used to improve performance → Často se používají ke zlepšení výkonu
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.
Výhody používání dočasných tabulek
Using temporary tables can make data processing more efficient. Here are three major benefits.
1. Zlepšení výkonu dotazů
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.
2. Ideální pro dočasné ukládání dat
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. Zachování bezpečnosti existujících dat
Directly manipulating production data is risky. By using temporary tables, you can process data without changing production data and reduce the risk of errors.
Shrnutí
MySQL temporary tables are a convenient tool for temporary data storage and processing.
- They are session-scoped and dropped when the session ends → Jsou omezeny na relaci a jsou odstraněny po jejím ukončení
- They are useful for performance improvements and batch processing → Jsou užitečné pro zlepšení výkonu a dávkové zpracování
- They allow safe operations without changing production data → Umožňují bezpečné operace bez změny produkčních dat
2. Základy dočasných tabulek
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.”
Rozdíly mezi dočasnými tabulkami a běžnými tabulkami
Temporary tables and regular tables differ significantly in data retention and access behavior. The table below summarizes the main differences.
| Item | Temporary Table | Regular Table |
|---|---|---|
| Lifetime | Dropped when the session ends | Exists until explicitly dropped |
| Access | Available only within the session (not visible to other connections) | Shareable across all sessions |
| Conflicts | Can be used even if a regular table with the same name exists | Cannot create another table with the same name |
| Storage location | MEMORY (default) or an InnoDB temporary area | Stored in the database storage |
| Persistence | None (dropped when the session ends) | Yes (retained by the database) |
Klíčové body
- Temporary tables are isolated per session and are not visible to other users. → Dočasné tabulky jsou izolovány v rámci relace a nejsou viditelné pro ostatní uživatele.
- You can create them without error even if a regular table with the same name exists . → Můžete je vytvořit bez chyby, i když existuje běžná tabulka se stejným názvem.
- They are created explicitly using
CREATE TEMPORARY TABLEand are automatically dropped when the session ends . → Jsou vytvořeny explicitně pomocíCREATE TEMPORARY TABLEa jsou automaticky odstraněny po ukončení relace.
Rozdíly mezi dočasnými tabulkami a interními dočasnými tabulkami
In addition to user-created temporary tables, MySQL also creates internal temporary tables automatically. They may sound similar, but their purposes and management differ.
| Item | Temporary Table | Internal Temporary Table |
|---|---|---|
| Creation method | Explicitly created using CREATE TEMPORARY TABLE | Automatically created by MySQL |
| Purpose | Created by the user for specific processing | Created by MySQL to process complex queries (GROUP BY, ORDER BY) |
| Scope | Available only within the session | Valid only while the query is executing |
| Deletion | Dropped when the session ends | Automatically dropped after the query completes |
Co je interní dočasná tabulka?
- MySQL may internally create temporary tables to optimize certain queries (such as
GROUP BY,ORDER BY,DISTINCT). → MySQL může interně vytvářet dočasné tabulky pro optimalizaci určitých dotazů (např.GROUP BY,ORDER BY,DISTINCT). - End users cannot manage them directly (you cannot explicitly create them like
CREATE TEMPORARY TABLE). → Koncoví uživatelé je nemohou spravovat přímo (nemůžete je explicitně vytvořit jakoCREATE TEMPORARY TABLE). - They are created as needed during query execution and are automatically dropped when the query completes . → Jsou vytvářeny podle potřeby během provádění dotazu a jsou automaticky odstraněny po dokončení dotazu.
Příklad, který může vyvolat interní dočasné tabulky
When you run a query like the following, MySQL may create an internal temporary table to process it.
SELECT category, COUNT(*)
FROM products
GROUP BY category
ORDER BY COUNT(*) DESC;
V tomto případě může MySQL vytvořit interní dočasnou tabulku pro dočasné uložení výsledků GROUP BY,
a poté ji použít k výpočtu konečného výstupu.
Summary
- Dočasná tabulka je uživatelem vytvořená dočasná tabulka, která je automaticky odstraněna při ukončení relace.
- Na rozdíl od běžných tabulek, nemůže být přístupná z jiných relací.
- Interní dočasná tabulka je MySQL vytvořena a automaticky odstraněna, a uživatelé ji nemohou přímo ovládat.

3. Jak vytvořit dočasné tabulky
Dočasnou tabulku MySQL můžete vytvořit pomocí příkazu CREATE TEMPORARY TABLE. V této sekci vysvětlujeme vše od základního vytvoření až po vytvoření tabulky na základě existující tabulky.
Základní způsob vytvoření dočasné tabulky
V MySQL používáte CREATE TEMPORARY TABLE k vytvoření dočasné tabulky.
Basic syntax
CREATE TEMPORARY TABLE table_name (
column_name data_type constraints,
column_name data_type constraints,
...
);
Ukázkový kód
Následující SQL vytvoří dočasnou tabulku s názvem users_temp se třemi sloupci: id (celé číslo), name (řetězec) a email (řetězec).
CREATE TEMPORARY TABLE users_temp (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
);
Protože je tato tabulka automaticky odstraněna při ukončení relace, neovlivňuje trvalou databázi.
Vytvoření dočasné tabulky na základě existující tabulky
Místo vytvoření dočasné tabulky od nuly můžete také zkopírovat strukturu existující tabulky pro vytvoření nové.
Použití CREATE TEMPORARY TABLE ... SELECT
V MySQL můžete vytvořit dočasnou tabulku na základě výsledku SELECT dotazu.
Základní syntaxe
CREATE TEMPORARY TABLE temp_table_name
SELECT * FROM existing_table_name;
Ukázkový kód
Například pro zkopírování datové struktury tabulky users a vytvoření nové dočasné tabulky users_temp můžete napsat:
CREATE TEMPORARY TABLE users_temp
SELECT * FROM users;
Tímto způsobem je struktura sloupců users přenesena do users_temp, ale omezení jako PRIMARY KEY a INDEX nejsou zkopírována.
Pokud chcete zkopírovat pouze strukturu tabulky bez zahrnutí dat, přidejte WHERE 1=0.
CREATE TEMPORARY TABLE users_temp
SELECT * FROM users WHERE 1=0;
Tento SQL zkopíruje definice sloupců users, ale neobsahuje žádná data.
Poznámky při vytváření dočasných tabulek
1. Dočasné tabulky jsou omezené na relaci
- Dočasná tabulka je platná pouze v rámci relace, ve které byla vytvořena.
- Nemůže být přístupná z jiných spojení nebo jiných uživatelů.
2. Můžete ji vytvořit i když existuje běžná tabulka se stejným názvem
- Například i když v databázi existuje běžná tabulka s názvem
users, můžete vytvořit dočasnou tabulku s názvemusers. - V té relaci má dočasná tabulka přednost a běžná tabulka se skryje.
3. Vliv úložiště
- Ve výchozím nastavení dočasné tabulky používají engine
MEMORY, ale pokud je velikost dat velká, mohou být uloženy v dočasné oblastiInnoDB. - Pokud chcete explicitně specifikovat engine
MEMORY, napište to takto:CREATE TEMPORARY TABLE users_temp ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) ) ENGINE=MEMORY; - Engine
MEMORYje rychlý, ale má omezení velikosti dat. Pro velké datové sady zvažte použitíInnoDB.
Shrnutí
- Vytvářejte dočasné tabulky pomocí
CREATE TEMPORARY TABLE. - Můžete také vytvořit tabulku zkopírováním existující tabulky (
SELECT * FROM). - Engine
MEMORYmůže být rychlý, aleInnoDBje často lepší pro velké datové sady. - Dočasné tabulky jsou spravovány na úrovni relace a jsou automaticky odstraněny při ukončení relace.
4. Jak používat dočasné tabulky
MySQL temporary tables can be operated like regular tables, including INSERT, UPDATE, DELETE, and SELECT. In this section, we explain each operation in detail.
Inserting data
To add data to a temporary table, use the regular INSERT INTO statement.
Basic syntax
INSERT INTO temp_table_name (column1, column2, ...)
VALUES (value1, value2, ...);
Sample code
The following SQL inserts data into a temporary table named users_temp.
INSERT INTO users_temp (id, name, email)
VALUES (1, 'Taro Yamada', 'taro@example.com');
You can also copy and insert data from an existing table.
INSERT INTO users_temp (id, name, email)
SELECT id, name, email FROM users WHERE age >= 18;
This SQL inserts data for users aged 18 or older from the users table into the temporary table.
Updating data
To modify data in a temporary table, use the regular UPDATE statement.
Basic syntax
UPDATE temp_table_name
SET column_name = new_value
WHERE condition;
Sample code
For example, to change the name of the user with id=1 in the users_temp table:
UPDATE users_temp
SET name = 'Ichiro Sato'
WHERE id = 1;
Deleting data
To delete unnecessary data, use the DELETE statement.
Basic syntax
DELETE FROM temp_table_name WHERE condition;
Sample code
For example, to delete the row with id=1 from users_temp:
DELETE FROM users_temp WHERE id = 1;
To delete all data in the table, omit the WHERE clause.
DELETE FROM users_temp;
Note that using DELETE does not drop the table itself; it deletes only the data.
Selecting data
To retrieve data stored in a temporary table, use the SELECT statement.
Basic syntax
SELECT column_name FROM temp_table_name WHERE condition;
Sample code
For example, to retrieve all data from users_temp:
SELECT * FROM users_temp;
To retrieve data matching a specific condition, use the WHERE clause.
SELECT * FROM users_temp WHERE email LIKE '%@example.com';
This SQL retrieves only rows where the email address contains @example.com.
Notes when using temporary tables
1. Data is removed when the session ends
- Temporary tables are managed per session, and their data is also removed when the session ends.
- For long-running processing, it is recommended to back up data periodically.
2. Creating a temporary table with the same name causes an error
- If you try to create a temporary table with the same name using
CREATE TEMPORARY TABLE, an error occurs. - As an error avoidance approach, run
DROP TEMPORARY TABLE IF EXISTSbeforehand.DROP TEMPORARY TABLE IF EXISTS users_temp; CREATE TEMPORARY TABLE users_temp (...);
3. Storage engine constraints
- Temporary tables default to the
MEMORYengine, but large datasets may be automatically stored in anInnoDBtemporary area. - For large datasets, using an
InnoDBtemporary table is recommended.
Summary
- Temporary tables can perform INSERT, UPDATE, DELETE, and SELECT just like regular tables.
- When the session ends, data in the temporary table is also automatically removed.
- Running
DROP TEMPORARY TABLE IF EXISTSbeforehand helps avoid name-conflict errors. - For large datasets, using an
InnoDBtemporary table is recommended.
5. Managing and Dropping Temporary Tables
MySQL temporary tables are automatically dropped when the session ends. However, in some cases you may need to drop them explicitly. In this section, we explain how to manage and drop temporary tables.
How to drop a temporary table
To explicitly drop a temporary table, use the DROP TEMPORARY TABLE statement.
Basic syntax
DROP TEMPORARY TABLE table_name;
Například pro odstranění dočasné tabulky s názvem users_temp spusťte:
DROP TEMPORARY TABLE users_temp;
Po spuštění tohoto SQL je tabulka users_temp odstraněna a v rámci relace již nelze použít.
Automatic drop when the session ends
Dočasná tabulka je automaticky odstraněna při ukončení relace.
How automatic drop works
- Vytvořte dočasnou tabulku pomocí
CREATE TEMPORARY TABLE - Pracujte s jejími daty, dokud je relace aktivní
- Když je relace (spojení) uzavřena, dočasná tabulka je automaticky odstraněna
However, be careful in the following cases:
- When sessions remain open for a long time → Zbytečné dočasné tabulky mohou spotřebovávat paměť, proto se doporučuje spouštět
DROP TEMPORARY TABLEpodle potřeby. - When handling large amounts of data → Aby nedocházelo k tlaku na úložiště, je důležité tabulky řádně odstraňovat.
Using DROP TEMPORARY TABLE IF EXISTS
Aby se předešlo chybám při odstraňování tabulky, která nemusí existovat, můžete použít IF EXISTS.
Basic syntax
DROP TEMPORARY TABLE IF EXISTS table_name;
Sample code
DROP TEMPORARY TABLE IF EXISTS users_temp;
Tento SQL odstraní users_temp, pokud existuje; pokud neexistuje, nevygeneruje chybu.
Common errors and fixes
Error 1: “Table not found”
When it happens:
- Když se pokusíte odstranit neexistující tabulku pomocí
DROP TEMPORARY TABLE - Protože dočasné tabulky jsou omezeny na relaci, nemůžete je odstranit z jiné relace
Fix:
- Přidejte
IF EXISTS, abyste se vyhnuli chyběDROP TEMPORARY TABLE IF EXISTS users_temp;
- Odstraňte ji ve správné relaci
Error 2: “Table already exists”
When it happens:
- Když se pokusíte vytvořit dočasnou tabulku se jménem, které již existuje
Fix:
- Nejprve spusťte
DROP TEMPORARY TABLE IF EXISTSDROP TEMPORARY TABLE IF EXISTS users_temp; CREATE TEMPORARY TABLE users_temp ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) );
Best practices for managing temporary tables
- Drop them explicitly when you no longer need them
- Spusťte
DROP TEMPORARY TABLEpodle potřeby, abyste uvolnili zbytečné tabulky.
- Use
IF EXISTSto avoid errors
DROP TEMPORARY TABLE IF EXISTSzabraňuje chybám při odstraňování neexistující tabulky.
- Be mindful of session management
- Dlouho běžící relace mohou způsobit, že dočasné tabulky spotřebují paměť, proto je odstraňujte podle potřeby.
- Understand storage engine impact
- Engine
MEMORYje rychlý, ale má omezení velikosti dat. - Pokud používáte
InnoDB, musíte zohlednit využití místa na disku.
Summary
- Můžete explicitně odstranit dočasné tabulky pomocí
DROP TEMPORARY TABLE. - Jsou automaticky odstraněny při ukončení relace, ale pro dlouho běžící relace se doporučuje ruční úklid.
DROP TEMPORARY TABLE IF EXISTSpomáhá předcházet chybám při odstraňování.- Je užitečné vědět, jak řešit chyby „Table not found“ a „Table already exists“.
6. Practical Use Cases for Temporary Tables
Dočasné tabulky MySQL se používají k efektivnějšímu dočasnému ukládání a zpracování dat. V této sekci představíme běžné scénáře, kde jsou dočasné tabulky užitečné, a vysvětlíme podrobnosti implementace.
1. Using as an intermediate table for aggregation
Při analýze dat a tvorbě reportů může přímé zpracování velkých datových sad zpomalit vykonávání dotazů. Použitím dočasné tabulky můžete data nejprve uspořádat a poté je zpracovat, což zvyšuje výkon.
Scenario
salestabulka obsahuje data o prodeji za jeden rok.- Chcete vypočítat měsíční celkové prodeje a provést další analýzu.
Example implementation
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
userstable, 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
orderstable. - 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;
-- Potvrďte transakci
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
- Pokud v
CREATE TEMPORARY TABLEnespecifikujetePRIMARY KEYneboINDEX, nebudou vytvořeny automaticky. - Pokud potřebujete indexy v dočasné tabulce, musíte je vytvořit ručně.
4. Výchozí úložiště je MEMORY
- S enginem
MEMORYmůže velké množství dat způsobit výměnu na disk a snížit výkon. - Pokud specifikujete
InnoDB, dokáže zpracovat větší objemy dat, ale spotřeba disku se zvýší.
5. Není ovlivněno transakcemi
- Dočasné tabulky nejsou ovlivněny
ROLLBACK. - Proto nejsou vhodné pro zpracování, které vyžaduje přísnou transakční konzistenci.
Alternativy k dočasným tabulkám
Aby se předešlo těmto omezením, můžete místo dočasných tabulek použít pohledy nebo poddotazy pro flexibilnější zpracování dat.
1. Použijte pohled
Pohled lze použít podobně jako dočasné tabulky pro odkazování na dočasná data. Pohled funguje jako virtuální tabulka a nevyžaduje dočasné úložiště dat, což pomáhá vyhnout se omezením úložiště.
Vytvořte pohled
CREATE VIEW active_users AS
SELECT id, name, email FROM users WHERE last_login >= NOW() - INTERVAL 1 YEAR;
Použijte pohled
SELECT * FROM active_users;
Výhody používání pohledu
✅ Žádné využití úložiště (data jsou odkazována přímo, není nutné je dočasně ukládat)
✅ Nezávislé na relaci (k dispozici ostatním uživatelům a připojením)
✅ Schéma může být zachováno (můžete si prohlédnout definici pomocí SHOW CREATE VIEW)
Nevýhody používání pohledu
❌ Obtížné aktualizovat (přímý INSERT nebo UPDATE na pohled je omezený)
❌ Výkon může klesat u velkých datových sad
2. Použijte poddotaz
Můžete také použít poddotaz k zpracování dočasných dat bez vytváření dočasné tabulky.
Použití dočasné tabulky
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;
Použití poddotazu
SELECT product_id, SUM(amount) AS total_sales
FROM orders
GROUP BY product_id
ORDER BY total_sales DESC
LIMIT 10;
Výhody používání poddotazu
✅ Lepší výkon, protože nevytváříte dočasnou tabulku
✅ Žádné využití úložiště
✅ Nezávislé na relaci a lze spustit kdykoli
Nevýhody používání poddotazu
❌ Čitelnost může trpět u složitých dotazů
❌ Obtížné opakované použití dat (můžete potřebovat opakovaně odkazovat na stejná data)
3. Použijte CTE (klauzule WITH)
V MySQL 8.0 a novějších můžete použít CTE (Common Table Expression) k dočasnému zpracování dat bez vytváření dočasné tabulky.
Příklad 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;
Výhody používání CTE
✅ Zlepšuje čitelnost (často snazší číst než poddotazy)
✅ Může optimalizovat výkon (dočasné zpracování bez vytváření dočasné tabulky)
Nevýhody používání CTE
❌ Není k dispozici v MySQL 5.x (podporováno pouze v MySQL 8.0 a novějších)
Shrnutí
| Method | Pros | Cons |
|---|---|---|
| Temporary table | Good for session-scoped data processing | Consumes storage and disappears when the session ends |
| View | No storage usage, not session-dependent | Hard to update, possible performance degradation |
| Subquery | No storage usage, simple | Hard to reuse, reduced readability |
| CTE (WITH) | Better readability, performance optimization | Available only in MySQL 8.0+ |
8. Často kladené otázky
Zde jsou často kladené otázky o dočasných tabulkách MySQL. Doufáme, že to pomůže objasnit, jak se chovají a jaká mají omezení.
1. Lze dočasné tabulky odkazovat z jiných relací?
Ne, nelze.
Dočasná tabulka je k dispozici pouze v rámci relace, ve které byla vytvořena. Ostatní relace k ní nemají přístup. I když jiný uživatel vytvoří dočasnou tabulku se stejným názvem, každá relace ji považuje za samostatnou tabulku.
2. Jaká oprávnění jsou vyžadována pro vytvoření dočasných tabulek?
Pro vytvoření dočasných tabulek potřebujete na databázi oprávnění CREATE TEMPORARY TABLES.
Pro udělení tohoto oprávnění uživateli spusťte následující SQL:
GRANT CREATE TEMPORARY TABLES ON database_name.* TO 'user_name'@'host';
Aktuální oprávnění můžete také zkontrolovat pomocí SHOW GRANTS.
SHOW GRANTS FOR 'user_name'@'host';
3. Ovlivňují dočasné tabulky využití disku?
Ano, mohou.
Ve výchozím nastavení MySQL dočasné tabulky používají engine MEMORY, ale když velikost dat překročí určitý práh, jsou uloženy v dočasné oblasti InnoDB.
Při práci s velkými datovými sadami mohou dočasné tabulky zabírat místo na disku. Proto se doporučuje je explicitně odstranit, jakmile již nejsou potřeba.
DROP TEMPORARY TABLE IF EXISTS table_name;
Aby se minimalizoval dopad na disk, pokud očekáváte velké objemy dat, zvažte vytvoření dočasné tabulky s InnoDB místo MEMORY.
CREATE TEMPORARY TABLE table_name (
column1 data_type,
column2 data_type
) ENGINE=InnoDB;
4. Jaký je rozdíl mezi dočasnou tabulkou a interní dočasnou tabulkou?
| Item | Temporary table | Internal temporary table |
|---|---|---|
| Creation method | Created by the user with CREATE TEMPORARY TABLE | Automatically created by MySQL during processing such as GROUP BY |
| Scope | Only within the creating session | Only during query execution |
| Deletion | Explicitly dropped with DROP TEMPORARY TABLE | Automatically dropped when the query completes |
5. Mohou být dočasné tabulky sdíleny mezi vlákny?
Ne, nemohou.
Dočasná tabulka je platná pouze v rámci vlákna (relace), ve kterém byla vytvořena, a nelze k ní přistupovat z jiných vláken nebo procesů.
Pokud potřebujete sdílet data mezi relacemi/vlákny, musíte místo toho vytvořit běžnou tabulku.
CREATE TABLE shared_temp_table (
id INT PRIMARY KEY,
data VARCHAR(255)
);
6. Mohou dočasné tabulky snižovat výkon?
Ano, v některých případech.
Obzvláště buďte opatrní v následujících situacích:
- Když je objem dat příliš velký
- Engine
MEMORYmá omezení velikosti; po jejich překročení mohou data přejít doInnoDB, což může snížit výkon. - Řešení: Pokud očekáváte překročení limitů
MEMORY, vytvořte tabulku od začátku sInnoDB. - Když nejsou nastaveny vhodné indexy
- Tabulky vytvořené pomocí
CREATE TEMPORARY TABLE ... SELECTnekopírují indexy, takže vyhledávání může být pomalejší. - Řešení: Přidejte indexy podle potřeby pomocí
ALTER TABLE.ALTER TABLE temp_table_name ADD INDEX (column_name);
7. Jak mohu zlepšit výkon dočasných tabulek?
Pro zlepšení výkonu dočasných tabulek jsou účinné následující přístupy:
✅ Použijte engine MEMORY (rychlé pro malé datové sady)
CREATE TEMPORARY TABLE table_name (
id INT PRIMARY KEY,
name VARCHAR(50)
) ENGINE=MEMORY;
✅ Vyberte pouze požadované sloupce (vynechejte zbytečné sloupce)
CREATE TEMPORARY TABLE users_temp AS
SELECT id, name FROM users;
✅ Přidejte vhodné indexy (zrychlí vyhledávání)
ALTER TABLE users_temp ADD INDEX (name);
✅ Odstraňte ji, jakmile ji již nepotřebujete (uvolní paměť)
DROP TEMPORARY TABLE IF EXISTS users_temp;
Shrnutí
- Dočasné tabulky nelze odkazovat z jiných relací nebo vláken
- Pro jejich vytvoření potřebujete oprávnění
CREATE TEMPORARY TABLES - Pokud data budou příliš velká, MySQL může přejít z
MEMORYnaInnoDB, což může snížit výkon - Přidání správných indexů může urychlit dotazy
- Odstraňování dočasných tabulek pomocí
DROP TEMPORARY TABLEse doporučuje, když již nejsou potřeba
Tímto je dokončeno podrobné vysvětlení dočasných tabulek MySQL, od základních pojmů po použití, omezení, alternativy a časté dotazy.
Při správném používání dočasných tabulek můžete výrazně zlepšit efektivitu zpracování dat.


