Bảng tạm MySQL: Cách hoạt động, Lợi ích và Các thực tiễn tốt nhất

目次

1. Giới thiệu

Khi làm việc với MySQL, “bảng tạm thời” là một cách hữu ích để lưu trữ và xử lý dữ liệu một cách tạm thời. Bằng cách sử dụng các bảng tạm thời, bạn có thể giữ dữ liệu tạm thời để giảm tải cho các truy vấn phức tạp và cải thiện hiệu suất của việc xử lý hàng loạt.

Trong bài viết này, chúng tôi sẽ giải thích bảng tạm thời của MySQL là gì, cùng với các trường hợp sử dụng và lợi ích chi tiết.

Bảng tạm thời là gì?

Bảng tạm thời là bảng chỉ có hiệu lực trong một phiên làm việc.
Không giống như các bảng thường, nó không được lưu trữ vĩnh viễn trong cơ sở dữ liệu và tự động bị xóa khi phiên làm việc kết thúc.

Các đặc điểm chính của bảng tạm thời như sau:

  • Chúng tồn tại riêng cho mỗi phiên (không thể truy cập từ các kết nối khác)
  • Chúng tự động bị xóa khi phiên kết thúc
  • Có thể được sử dụng mà không gây xung đột ngay cả khi đã tồn tại một bảng thường cùng tên
  • Chúng thường được dùng để cải thiện hiệu năng

Bảng tạm thời rất phù hợp cho việc phân tích dữ liệu và xử lý dữ liệu tạm thời, và chúng thường được dùng như hỗ trợ cho các tác vụ xử lý hàng loạt và tổng hợp.

Lợi ích khi sử dụng bảng tạm thời

Việc sử dụng bảng tạm thời có thể làm cho quá trình xử lý dữ liệu hiệu quả hơn. Dưới đây là ba lợi ích chính.

1. Cải thiện hiệu năng truy vấn

Khi xử lý một lượng lớn dữ liệu, việc sử dụng nhiều JOIN và các truy vấn con có thể làm cho quá trình trở nên phức tạp và tăng tải cho cơ sở dữ liệu. Với bảng tạm thời, bạn có thể lọc và lưu trữ dữ liệu trước, giúp tăng tốc thực thi truy vấn.

2. Lý tưởng cho việc lưu trữ dữ liệu tạm thời

Trong xử lý hàng loạt hoặc chuyển đổi dữ liệu, bạn có thể cần lưu trữ dữ liệu tạm thời và thực hiện các thao tác cần thiết. Bảng tạm thời cho phép bạn lưu trữ dữ liệu tạm thời và hỗ trợ xử lý nhanh trong bộ nhớ.

3. Bảo vệ dữ liệu hiện có

Việc thao tác trực tiếp trên dữ liệu sản xuất là rủi ro. Bằng cách sử dụng bảng tạm thời, bạn có thể xử lý dữ liệu mà không làm thay đổi dữ liệu sản xuất và giảm nguy cơ lỗi.

Tóm tắt

Bảng tạm thời của MySQL là một công cụ tiện lợi cho việc lưu trữ và xử lý dữ liệu tạm thời.

  • Chúng có phạm vi theo phiên và bị xóa khi phiên kết thúc
  • Chúng hữu ích cho việc cải thiện hiệu năng và xử lý hàng loạt
  • Chúng cho phép thực hiện các thao tác an toàn mà không thay đổi dữ liệu sản xuất

2. Những kiến thức cơ bản về bảng tạm thời

Bảng tạm thời của MySQL được dùng để lưu trữ dữ liệu tạm thời, khác với các bảng thường. Trong phần này, chúng tôi sẽ giải thích chi tiết các khái niệm cơ bản của bảng tạm thời, bao gồm “sự khác biệt so với bảng thường” và “sự khác biệt so với bảng tạm thời nội bộ”.

Sự khác biệt giữa bảng tạm thời và bảng thường

Bảng tạm thời và bảng thường có sự khác biệt đáng kể về việc giữ lại dữ liệu và hành vi truy cập. Bảng dưới đây tóm tắt các khác biệt chính.

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)

Các điểm chính

  • Bảng tạm thời được cô lập theo từng phiên và không hiển thị với người dùng khác.
  • Bạn có thể tạo chúng mà không gặp lỗi ngay cả khi đã tồn tại một bảng thường cùng tên.
  • Chúng được tạo một cách rõ ràng bằng CREATE TEMPORARY TABLEtự động bị xóa khi phiên kết thúc.

Sự khác biệt giữa bảng tạm thời và bảng tạm thời nội bộ

Ngoài các bảng tạm thời do người dùng tạo, MySQL cũng tự động tạo bảng tạm thời nội bộ. Chúng có thể nghe có vẻ giống nhau, nhưng mục đích và cách quản lý lại khác nhau.

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

Bảng tạm thời nội bộ là gì?

  • MySQL có thể tự động tạo các bảng tạm thời nội bộ để tối ưu một số truy vấn (như GROUP BY, ORDER BY, DISTINCT).
  • Người dùng cuối không thể quản lý chúng trực tiếp (bạn không thể tạo chúng một cách rõ ràng như CREATE TEMPORARY TABLE).
  • Chúng được tạo khi cần trong quá trình thực thi truy vấn và tự động bị xóa khi truy vấn hoàn thành.

Ví dụ có thể kích hoạt bảng tạm thời nội bộ

Khi bạn chạy một truy vấn như sau, MySQL có thể tạo một bảng tạm thời nội bộ để xử lý nó.

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

Trong trường hợp này, MySQL có thể tạo một bảng tạm nội bộ để tạm thời lưu trữ kết quả GROUP BY,
và sau đó sử dụng nó để tính toán kết quả cuối cùng.

Summary

  • Bảng tạm là một bảng tạm do người dùng tạo và sẽ tự động bị xóa khi phiên làm việc kết thúc.
  • Khác với các bảng thường, nó không thể được truy cập từ các phiên khác.
  • Bảng tạm nội bộ được MySQL tạo và xóa tự động, và người dùng không thể kiểm soát nó một cách trực tiếp.

3. Cách Tạo Bảng Tạm

Bạn có thể tạo một bảng tạm MySQL bằng câu lệnh CREATE TEMPORARY TABLE. Trong phần này, chúng tôi sẽ giải thích mọi thứ từ việc tạo cơ bản đến việc tạo một bảng dựa trên một bảng hiện có.

Cách cơ bản để tạo một bảng tạm

Trong MySQL, bạn sử dụng CREATE TEMPORARY TABLE để tạo một bảng tạm.

Basic syntax

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

Sample code

SQL sau tạo một bảng tạm có tên users_temp với ba cột: id (số nguyên), name (chuỗi), và email (chuỗi).

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

Vì bảng này được tự động xóa khi phiên kết thúc, nó không ảnh hưởng đến cơ sở dữ liệu lâu dài.

Tạo một bảng tạm dựa trên một bảng hiện có

Thay vì tạo một bảng tạm từ đầu, bạn cũng có thể sao chép cấu trúc của một bảng hiện có để tạo ra một bảng.

Using CREATE TEMPORARY TABLE ... SELECT

Trong MySQL, bạn có thể tạo một bảng tạm dựa trên kết quả của một câu lệnh SELECT.

Basic syntax

CREATE TEMPORARY TABLE temp_table_name
SELECT * FROM existing_table_name;

Sample code

Ví dụ, để sao chép cấu trúc dữ liệu của bảng users và tạo một bảng tạm mới users_temp, bạn có thể viết:

CREATE TEMPORARY TABLE users_temp
SELECT * FROM users;

Với phương pháp này, cấu trúc cột của users được chuyển sang users_temp, nhưng các ràng buộc như PRIMARY KEYINDEX không được sao chép.

Nếu bạn muốn sao chép chỉ cấu trúc bảng mà không bao gồm dữ liệu, hãy thêm WHERE 1=0.

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

Với SQL này, các định nghĩa cột của users được sao chép, nhưng không có dữ liệu nào được bao gồm.

Lưu ý khi tạo bảng tạm

1. Temporary tables are session-scoped

  • Bảng tạm chỉ hợp lệ trong phiên mà nó được tạo.
  • Nó không thể được truy cập từ các kết nối khác hoặc bởi người dùng khác.

2. You can create it even if a regular table with the same name exists

  • Ví dụ, ngay cả khi có một bảng thường có tên users trong cơ sở dữ liệu, bạn vẫn có thể tạo một bảng tạm có tên users.
  • Trong phiên đó, bảng tạm sẽ có ưu tiên và bảng thường sẽ bị ẩn.

3. Storage engine impact

  • Mặc định, các bảng tạm sử dụng engine MEMORY, nhưng nếu kích thước dữ liệu lớn, chúng có thể được lưu trong khu vực tạm thời của InnoDB.
  • Nếu bạn muốn chỉ định rõ ràng engine MEMORY, viết như sau: CREATE TEMPORARY TABLE users_temp ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) ) ENGINE=MEMORY;
  • Engine MEMORY nhanh nhưng có giới hạn kích thước dữ liệu. Đối với các bộ dữ liệu lớn, hãy cân nhắc sử dụng InnoDB.

Summary

  • Tạo bảng tạm bằng cách sử dụng CREATE TEMPORARY TABLE.
  • Bạn cũng có thể tạo một bảng bằng cách sao chép một bảng hiện có (SELECT * FROM).
  • Engine MEMORY có thể nhanh, nhưng InnoDB thường tốt hơn cho các bộ dữ liệu lớn.
  • Bảng tạm được quản lý theo từng phiên và tự động bị xóa khi phiên kết thúc.

4. Cách Sử Dụng Bảng Tạm

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 EXISTS beforehand. DROP TEMPORARY TABLE IF EXISTS users_temp; CREATE TEMPORARY TABLE users_temp (...);

3. Storage engine constraints

  • Temporary tables default to the MEMORY engine, but large datasets may be automatically stored in an InnoDB temporary area.
  • For large datasets, using an InnoDB temporary 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 EXISTS beforehand helps avoid name-conflict errors.
  • For large datasets, using an InnoDB temporary 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;

Sample code

For example, to drop a temporary table named users_temp, run:

DROP TEMPORARY TABLE users_temp;

After running this SQL, the users_temp table is removed and can no longer be used in the session.

Automatic drop when the session ends

A temporary table is automatically dropped when the session ends.

How automatic drop works

  1. Create a temporary table with CREATE TEMPORARY TABLE
  2. Operate on its data while the session is active
  3. When the session (connection) is closed, the temporary table is automatically dropped

However, be careful in the following cases:

  • When sessions remain open for a long time → Unnecessary temporary tables may consume memory, so it is recommended to run DROP TEMPORARY TABLE as needed.
  • When handling large amounts of data → To avoid storage pressure, it is important to drop tables appropriately.

Using DROP TEMPORARY TABLE IF EXISTS

To avoid errors when dropping a table that may not exist, you can use IF EXISTS.

Basic syntax

DROP TEMPORARY TABLE IF EXISTS table_name;

Sample code

DROP TEMPORARY TABLE IF EXISTS users_temp;

This SQL drops users_temp if it exists; if it does not exist, it will not raise an error.

Common errors and fixes

Error 1: “Table not found”

When it happens:

  • When you try to drop a table that does not exist using DROP TEMPORARY TABLE
  • Because temporary tables are session-scoped, you cannot drop them from a different session

Fix:

  • Add IF EXISTS to avoid the error
    DROP TEMPORARY TABLE IF EXISTS users_temp;
    
  • Drop it within the correct session

Error 2: “Table already exists”

When it happens:

  • When you try to create a temporary table with a name that already exists

Fix:

  • Run DROP TEMPORARY TABLE IF EXISTS beforehand
    DROP 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

  1. Drop them explicitly when you no longer need them
  • Run DROP TEMPORARY TABLE as needed to free unnecessary tables.
  1. Use IF EXISTS to avoid errors
  • DROP TEMPORARY TABLE IF EXISTS prevents errors when dropping a table that does not exist.
  1. Be mindful of session management
  • Long-lived sessions can cause temporary tables to consume memory, so drop them as appropriate.
  1. Understand storage engine impact
  • The MEMORY engine is fast but has data size limits.
  • If you use InnoDB , you need to consider disk space usage.

Summary

  • You can explicitly drop temporary tables using DROP TEMPORARY TABLE .
  • They are automatically dropped when the session ends, but for long-lived sessions, manual cleanup is recommended.
  • DROP TEMPORARY TABLE IF EXISTS helps prevent errors when dropping.
  • It is useful to know how to handle “Table not found” and “Table already exists” errors.

6. Practical Use Cases for Temporary Tables

MySQL temporary tables are used to make temporary data storage and processing more efficient. In this section, we introduce common scenarios where temporary tables are useful and explain implementation details.

1. Using as an intermediate table for aggregation

In data analysis and report generation, processing large datasets directly can slow down query execution. By using a temporary table, you can organize data first and then process it, improving performance.

Scenario

  • The sales table contains one year of sales data.
  • You want to calculate monthly total sales and perform further analysis.

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 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;

-- Cam kết giao dịch
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

  • Nếu bạn không chỉ định PRIMARY KEY hoặc INDEX trong CREATE TEMPORARY TABLE, chúng sẽ không được tạo tự động.
  • Nếu bạn cần các chỉ mục trên bảng tạm, bạn phải tạo chúng thủ công.

4. Engine lưu trữ mặc định là MEMORY

  • Với engine MEMORY, kích thước dữ liệu lớn có thể gây chuyển đổi sang đĩa và giảm hiệu năng.
  • Nếu bạn chỉ định InnoDB, nó có thể xử lý dữ liệu lớn hơn, nhưng việc sử dụng đĩa sẽ tăng lên.

5. Không bị ảnh hưởng bởi giao dịch

  • Bảng tạm không bị ảnh hưởng bởi ROLLBACK.
  • Do đó, chúng không phù hợp cho các xử lý yêu cầu tính nhất quán giao dịch chặt chẽ.

Các giải pháp thay thế cho bảng tạm

Để tránh những hạn chế này, bạn có thể sử dụng view hoặc subquery thay cho bảng tạm để xử lý dữ liệu linh hoạt hơn.

1. Sử dụng view

View có thể được sử dụng tương tự như bảng tạm để tham chiếu dữ liệu tạm thời. View hoạt động như một bảng ảo và không yêu cầu lưu trữ dữ liệu tạm, giúp tránh các ràng buộc về lưu trữ.

Tạo view

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

Sử dụng view

SELECT * FROM active_users;
Ưu điểm của việc sử dụng view

Không tốn dung lượng lưu trữ (dữ liệu được tham chiếu trực tiếp, không cần lưu tạm thời)
Không phụ thuộc vào phiên (có sẵn cho các người dùng và kết nối khác)
Có thể giữ lại schema (bạn có thể xem định nghĩa bằng SHOW CREATE VIEW)

Nhược điểm của việc sử dụng view

Khó cập nhật (việc INSERT hoặc UPDATE trực tiếp trên view bị hạn chế)
Hiệu năng có thể giảm khi dữ liệu lớn

2. Sử dụng subquery

Bạn cũng có thể sử dụng subquery để xử lý dữ liệu tạm thời mà không cần tạo bảng tạm.

Sử dụng bảng tạm

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;

Sử dụng subquery

SELECT product_id, SUM(amount) AS total_sales
FROM orders
GROUP BY product_id
ORDER BY total_sales DESC
LIMIT 10;
Ưu điểm của việc sử dụng subquery

Hiệu năng tốt hơn vì bạn không tạo bảng tạm
Không tốn dung lượng lưu trữ
Không phụ thuộc vào phiên và có thể thực thi bất kỳ lúc nào

Nhược điểm của việc sử dụng subquery

Độ đọc hiểu có thể giảm đối với các truy vấn phức tạp
Khó tái sử dụng dữ liệu (bạn có thể cần tham chiếu cùng một dữ liệu nhiều lần)

3. Sử dụng CTE (câu lệnh WITH)

Trong MySQL 8.0 trở lên, bạn có thể sử dụng CTE (Common Table Expression) để xử lý dữ liệu tạm thời mà không cần tạo bảng tạm.

Ví dụ 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;
Ưu điểm của việc sử dụng CTE

Cải thiện độ đọc hiểu (thường dễ đọc hơn so với subquery)
Có thể tối ưu hiệu năng (xử lý kiểu tạm thời mà không tạo bảng tạm)

Nhược điểm của việc sử dụng CTE

Không khả dụng trong MySQL 5.x (chỉ hỗ trợ trong MySQL 8.0 trở lên)

Tóm tắt

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. Câu hỏi thường gặp

Dưới đây là các câu hỏi thường gặp về bảng tạm MySQL. Chúng tôi hy vọng điều này giúp làm rõ cách chúng hoạt động và những hạn chế của chúng.

1. Bảng tạm có thể được tham chiếu từ các phiên khác không?

Không, chúng không thể.
Bảng tạm chỉ có sẵn trong phiên mà nó được tạo. Các phiên khác không thể truy cập nó. Ngay cả khi người dùng khác tạo một bảng tạm cùng tên, mỗi phiên sẽ coi đó là một bảng độc lập.

2. Cần những quyền nào để tạo bảng tạm?

Để tạo các bảng tạm, bạn cần có quyền CREATE TEMPORARY TABLES trên cơ sở dữ liệu.
Để cấp quyền này cho người dùng, hãy chạy câu lệnh SQL sau:

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

Bạn cũng có thể kiểm tra các quyền hiện tại bằng cách sử dụng SHOW GRANTS.

SHOW GRANTS FOR 'user_name'@'host';

3. Các bảng tạm có ảnh hưởng đến việc sử dụng đĩa không?

Có, chúng có thể.
Mặc định, các bảng tạm của MySQL sử dụng engine MEMORY, nhưng khi kích thước dữ liệu vượt quá một ngưỡng nhất định, chúng sẽ được lưu trong khu vực tạm thời InnoDB.

Khi làm việc với các bộ dữ liệu lớn, các bảng tạm có thể tiêu tốn không gian đĩa. Do đó, được khuyến nghị xóa chúng một cách rõ ràng khi không còn cần thiết.

DROP TEMPORARY TABLE IF EXISTS table_name;

Để giảm thiểu tác động lên đĩa, nếu bạn dự đoán khối lượng dữ liệu lớn, hãy cân nhắc tạo bảng tạm bằng InnoDB thay vì MEMORY.

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

4. Sự khác nhau giữa bảng tạm và bảng tạm nội bộ là gì?

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. Các bảng tạm có thể được chia sẻ giữa các luồng không?

Không, chúng không thể.
Một bảng tạm chỉ có hiệu lực trong luồng (phiên) mà nó được tạo, và không thể được truy cập từ các luồng hoặc tiến trình khác.

Nếu bạn cần chia sẻ dữ liệu giữa các phiên/luồng, bạn phải tạo một bảng thường thay vì bảng tạm.

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

6. Các bảng tạm có thể làm giảm hiệu năng không?

Có, trong một số trường hợp.
Cụ thể, hãy cẩn thận trong các tình huống sau:

  • Khi khối lượng dữ liệu quá lớn
  • Engine MEMORY có giới hạn kích thước; khi vượt quá, dữ liệu có thể chuyển sang InnoDB, điều này có thể giảm hiệu năng .
  • Giải pháp: Nếu bạn dự đoán sẽ vượt quá giới hạn của MEMORY, hãy tạo bảng bằng InnoDB ngay từ đầu.
  • Khi không có các chỉ mục phù hợp
  • Các bảng được tạo bằng CREATE TEMPORARY TABLE ... SELECT không sao chép chỉ mục, do đó các truy vấn có thể chậm hơn.
  • Giải pháp: Thêm chỉ mục khi cần thiết bằng cách sử dụng ALTER TABLE .
    ALTER TABLE temp_table_name ADD INDEX (column_name);
    

7. Làm thế nào để cải thiện hiệu năng của bảng tạm?

Để cải thiện hiệu năng của bảng tạm, các cách tiếp cận sau đây là hiệu quả:

Sử dụng engine MEMORY (nhanh cho các bộ dữ liệu nhỏ)

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

Chỉ chọn các cột cần thiết (bỏ qua các cột không cần thiết)

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

Thêm các chỉ mục phù hợp (tăng tốc độ tìm kiếm)

ALTER TABLE users_temp ADD INDEX (name);

Xóa nó ngay khi không còn cần thiết (giải phóng bộ nhớ)

DROP TEMPORARY TABLE IF EXISTS users_temp;

Tóm tắt

  • Bảng tạm không thể được tham chiếu từ các phiên hoặc luồng khác
  • Bạn cần quyền CREATE TEMPORARY TABLES để tạo chúng
  • Nếu dữ liệu trở nên quá lớn, MySQL có thể chuyển từ MEMORY sang InnoDB, điều này có thể làm giảm hiệu năng
  • Thêm các chỉ mục phù hợp có thể tăng tốc các truy vấn
  • Việc xóa các bảng tạm bằng DROP TEMPORARY TABLE được khuyến nghị khi chúng không còn cần thiết

Đây là phần giải thích chi tiết về các bảng tạm của MySQL, từ các khái niệm cơ bản đến các trường hợp sử dụng, hạn chế, các giải pháp thay thế và các câu hỏi thường gặp.
Bằng cách sử dụng các bảng tạm một cách hợp lý, bạn có thể cải thiện đáng kể hiệu quả của quá trình xử lý dữ liệu.