อธิบายตารางชั่วคราวของ MySQL: การสร้าง, การใช้, การลบ + แนวปฏิบัติที่ดีที่สุด (พร้อมตัวอย่าง SQL)

目次

1. (สำหรับผู้เริ่มต้น) ตารางชั่วคราวของ MySQL คืออะไร? ความแตกต่างจากตารางปกติ

บทนำ

เมื่อจัดการข้อมูลด้วย MySQL มีบางครั้งที่คุณต้องการเก็บข้อมูลชั่วคราว ตัวอย่างเช่น เมื่อประมวลผลชุดข้อมูลขนาดใหญ่ คุณอาจต้องการบันทึกผลลัพธ์ระหว่างขั้นตอนขณะทำงาน ในกรณีเหล่านั้น temporary table (Temporary Table) มีประโยชน์มาก

ในบทความนี้ เราจะอธิบายกลไกพื้นฐานของตารางชั่วคราวของ MySQL และวิธีที่มันแตกต่างจากตารางปกติ

1-1. ตารางชั่วคราวคืออะไร?

ตารางชั่วคราวคือ ตารางพิเศษที่มีอยู่เฉพาะระหว่างเซสชันของฐานข้อมูล (การเชื่อมต่อ)
ไม่เหมือนกับตารางปกติ มันจะถูกลบโดยอัตโนมัติเมื่อเซสชันสิ้นสุด ทำให้เหมาะสำหรับการเก็บข้อมูลชั่วคราว

คุณลักษณะหลักของตารางชั่วคราว

  • Isolated per session ตารางชั่วคราวสามารถเข้าถึงได้เฉพาะภายในเซสชันที่สร้างมันเท่านั้น เซสชันอื่นไม่สามารถอ้างอิงได้.
  • Automatically removed when the session ends ตารางชั่วคราวจะหายไปโดยอัตโนมัติเมื่อเซสชันสิ้นสุด แม้ว่าคุณจะไม่ได้ลบมันอย่างชัดเจน.
  • You can create temporary tables with the same name ไม่เหมือนกับตารางปกติ สามารถ create temporary tables with the same name in different sessions ได้.

1-2. ความแตกต่างจากตารางปกติ

ตารางชั่วคราวและตารางปกติมีความแตกต่างดังต่อไปนี้.

ComparisonTemporary TableRegular Table
Data retentionValid only during the session (automatically removed)Stored permanently
Access scopeOnly within the session that created itAccessible to all users (subject to privileges)
Name conflictsYou can create temporary tables with the same nameYou cannot create another table with the same name in the same database
Required privilegesRequires the CREATE TEMPORARY TABLES privilegeRequires the standard CREATE TABLE privilege
IndexesSupportedSupported
PerformanceOften created in memory and can be fastStored on disk; performance can degrade as data grows

ควรใช้แบบไหน?

  • หากคุณต้องการข้อมูลแบบชั่วคราวและสามารถทิ้งได้หลังการประมวลผลTemporary table
  • หากคุณต้องการเก็บข้อมูลอย่างถาวรและนำกลับมาใช้ใหม่ในภายหลังRegular table

ตัวอย่างเช่น ตารางชั่วคราวมีประโยชน์มากสำหรับงานเช่นการวิเคราะห์ข้อมูลขนาดใหญ่หรือการสรุปข้อมูลแบบชั่วคราว

1-3. เมื่อใดที่คุณต้องการตารางชั่วคราว

ตารางชั่วคราวของ MySQL มีประโยชน์เป็นพิเศษในสถานการณ์ต่อไปนี้.

1) ปรับปรุงประสิทธิภาพการคิวรี

ตัวอย่างเช่น เมื่อทำการ JOIN ที่ซับซ้อน คุณสามารถลดเวลาในการประมวลผลโดยสร้างตารางชั่วคราวเพื่อเก็บข้อมูลระหว่างขั้นตอนล่วงหน้า.

ตัวอย่าง: ลดภาระการ JOIN
CREATE TEMPORARY TABLE temp_users AS
SELECT id, name FROM users WHERE status = 'active';

โดยการเก็บข้อมูลเป้าหมายในตารางชั่วคราวก่อนแล้วจึงทำการ JOIN ประสิทธิภาพจะดีขึ้น.

2) เก็บข้อมูลแบบชั่วคราว

ตารางชั่วคราวยังมีประโยชน์เมื่อแอปพลิเคชันต้องจัดการข้อมูลแบบชั่วคราว
ตัวอย่างเช่น คุณสามารถเก็บข้อมูลที่ผู้ใช้ค้นหาไว้ในตารางชั่วคราวและให้มันถูกลบเมื่อเซสชันสิ้นสุด.

3) ตารางกลางสำหรับการประมวลผลแบบแบตช์

เมื่อประมวลผลข้อมูลจำนวนมาก การใช้ตารางชั่วคราวเป็นตารางกลางสามารถเพิ่มความเสถียรของกระบวนการได้.

1-4. ข้อจำกัดของตารางชั่วคราว

ตารางชั่วคราวสะดวก แต่ก็มีข้อจำกัดบางประการ.

1) ถูกลบโดยอัตโนมัติเมื่อเซสชันสิ้นสุด

เนื่องจากตารางชั่วคราวถูกลบโดยอัตโนมัติเมื่อเซสชันสิ้นสุด จึงไม่เหมาะสำหรับการเก็บข้อมูลอย่างถาวร.

2) ไม่สามารถเข้าถึงจากเซสชันอื่น

ตารางชั่วคราวสามารถใช้ได้เฉพาะภายในเซสชันที่สร้างมันเท่านั้น ดังนั้นจึงไม่สามารถแชร์กับผู้ใช้หรือกระบวนการอื่นได้.

3) ความขัดแย้งที่อาจเกิดขึ้นกับตารางปกติที่มีชื่อเดียวกัน

หากมีตารางปกติที่มีชื่อเดียวกัน การสร้างตารางชั่วคราวด้วยชื่อนั้นจะทำให้ regular table หายไปชั่วคราว ดังนั้นควรระมัดระวัง.

CREATE TEMPORARY TABLE users (id INT, name VARCHAR(255));
SELECT * FROM users; -- This query references the temporary table data

ดังที่แสดงด้านบน เมื่อสร้างตารางชั่วคราวแล้ว คุณไม่สามารถเข้าถึงตารางปกติที่มีชื่อเดียวกันได้จนกว่าตารางชั่วคราวจะหายไป ควรเลือกชื่อ ตารางอย่างระมัดระวัง.

สรุป

ตารางชั่วคราวของ MySQL เป็นฟีเจอร์ที่สะดวกสำหรับการเก็บข้อมูลชั่วคราวและการปรับปรุงประสิทธิภาพการคิวรี
โดยการเข้าใจว่ามันแตกต่างจากตารางปกติอย่างไรและใช้มันอย่างเหมาะสม คุณจะสามารถประมวลผลข้อมูลได้อย่างมีประสิทธิภาพมากขึ้น.

✔ สรุปสั้น

  • ตารางชั่วคราวจะถูกลบโดยอัตโนมัติเมื่อเซสชันสิ้นสุด
  • แตกต่างจากตารางปกติ ตารางชั่วคราวจะถูกแยกตามแต่ละเซสชัน
  • เหมาะสำหรับการจัดเก็บชั่วคราวและการปรับปรุงประสิทธิภาพการคิวรี
  • ไม่เหมาะสำหรับการจัดเก็บถาวรเนื่องจากข้อมูลจะหายไปเมื่อเซสชันสิ้นสุด
  • ไม่สามารถเข้าถึงจากเซสชันอื่นได้ และอาจขัดแย้งกับตารางปกติที่มีชื่อเดียวกัน

2. (พร้อมตัวอย่างโค้ด) วิธีสร้างตารางชั่วคราวใน MySQL

บทนำ

ในส่วนก่อนหน้า เราได้อธิบายแนวคิดพื้นฐานของตารางชั่วคราวและความแตกต่างจากตารางปกติ
ในส่วนนี้ เราจะอธิบายวิธีสร้างตารางชั่วคราวและวิธีทำงานกับข้อมูลในตารางนั้น

การสร้างตารางชั่วคราวนั้นง่าย แต่หากคุณไม่ได้ใช้ไวยากรณ์ที่ถูกต้อง ตารางอาจทำงานไม่เป็นตามที่คาดหวัง ส่วนนี้จะอธิบาย ไวยากรณ์พื้นฐาน การสร้างจากตารางที่มีอยู่ และวิธีตรวจสอบตารางชั่วคราว อย่างละเอียด

2-1. ไวยากรณ์พื้นฐานสำหรับตารางชั่วคราว

เพื่อสร้างตารางชั่วคราว ให้ใช้คำสั่ง CREATE TEMPORARY TABLE

ไวยากรณ์พื้นฐาน

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

ไวยากรณ์นั้นเกือบจะเหมือนกับ CREATE TABLE แต่การเพิ่ม TEMPORARY ทำให้เป็นตารางชั่วคราว

ตัวอย่าง: เก็บข้อมูลผู้ใช้ในตารางชั่วคราว

CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    email VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

ตาราง temp_users นี้ ใช้ได้เฉพาะในเซสชันปัจจุบัน และจะถูกลบโดยอัตโนมัติเมื่อเซสชันสิ้นสุด

2-2. สร้างตารางชั่วคราวจากข้อมูลของตารางที่มีอยู่

คุณยังสามารถสร้างตารางชั่วคราวจากข้อมูลของตารางที่มีอยู่ได้

ไวยากรณ์

CREATE TEMPORARY TABLE temp_table_name AS
SELECT * FROM existing_table WHERE condition;

ตัวอย่าง: เก็บเฉพาะผู้ใช้ที่ใช้งานอยู่ในตารางชั่วคราว

CREATE TEMPORARY TABLE active_users AS
SELECT id, name, email FROM users WHERE status = 'active';

วิธีนี้จะดึงเฉพาะผู้ใช้ที่มี status = 'active' จากตาราง users และเก็บไว้ในตารางชั่วคราวใหม่ชื่อ active_users

จุดสำคัญ
  • คัดลอกข้อมูลจากตารางที่มีอยู่โดยตรง
  • ประเภทข้อมูลของคอลัมน์จะถูกกำหนดโดยอัตโนมัติ
  • ดัชนีจะไม่ถูกคัดลอก , ดังนั้นให้เพิ่มดัชนีด้วยตนเองหากจำเป็น

2-3. วิธีตรวจสอบข้อมูลของตารางชั่วคราว

แสดงรายการตาราง

SHOW TABLES;

อย่างไรก็ตาม ตารางชั่วคราวจะไม่ปรากฏในรายการจาก SHOW TABLES ปกติ

ตรวจสอบโครงสร้างของตารางชั่วคราว

DESC temp_users;

หรือ

SHOW CREATE TABLE temp_users;

วิธีนี้ช่วยให้คุณตรวจสอบโครงสร้างคอลัมน์และข้อจำกัดของตารางชั่วคราว

2-4. แทรกข้อมูลลงในตารางชั่วคราว

การแทรกข้อมูลลงในตารางชั่วคราวนั้นเหมือนกับการทำกับตารางปกติ

แทรกข้อมูล

INSERT INTO temp_users (name, email) VALUES 
('Taro Tanaka', 'tanaka@example.com'),
('Hanako Sato', 'sato@example.com');

ตรวจสอบข้อมูล

SELECT * FROM temp_users;

นี่ยืนยันว่าข้อมูลได้ถูกเก็บไว้ในตารางชั่วคราวแล้ว

2-5. หมายเหตุเมื่อสร้างตารางชั่วคราว

1) ระวังการชนกันของชื่อ ตาราง

หากคุณสร้างตารางชั่วคราวที่มีชื่อเดียวกับตารางปกติ ตารางชั่วคราวจะมีลำดับความสำคัญเหนือกว่า และตารางปกติจะไม่สามารถเข้าถึงได้ชั่วคราว

CREATE TEMPORARY TABLE users (id INT, name VARCHAR(50));
SELECT * FROM users; -- This returns data from the temporary table

ด้วยเหตุนี้จึงแนะนำให้ใช้ คำนำหน้าเช่น “temp_” สำหรับชื่อของตารางชั่วคราว

2) ดัชนีจะไม่ถูกสืบทอดโดยอัตโนมัติ

เมื่อคุณคัดลอกข้อมูลจากตารางที่มีอยู่ ดัชนีจะไม่ถูกนำมาใช้โดยอัตโนมัติ
หากจำเป็น คุณต้องเพิ่มดัชนีด้วยตนเอง

ALTER TABLE temp_users ADD INDEX (email);

3) คุณต้องมีสิทธิ์ในการสร้างตารางชั่วคราว

To create a temporary table, you need the CREATE TEMPORARY TABLES privilege.

GRANT CREATE TEMPORARY TABLES ON database_name.* TO 'user'@'localhost';

Without this privilege, you cannot create temporary tables.

สรุป

In this section, we explained how to create temporary tables.

✔ สรุปสั้น

  • สร้างตารางชั่วคราวด้วย CREATE TEMPORARY TABLE
  • คุณยังสามารถสร้างได้โดยคัดลอกข้อมูลจากตารางที่มีอยู่
  • จะถูกลบโดยอัตโนมัติเมื่อเซสชันสิ้นสุด
  • ดัชนีจะไม่ถูกนำไปใช้โดยอัตโนมัติ—ระวัง
  • ใช้คำนำหน้าเช่น “temp_” เพื่อหลีกเลี่ยงการชนชื่อ
  • คุณต้องมีสิทธิ์ที่เหมาะสม (CREATE TEMPORARY TABLES)

3. วิธีการจัดการข้อมูลในตารางชั่วคราวของ MySQL (INSERT, UPDATE, DELETE)

บทนำ

In the previous section, we explained how to create a temporary table in MySQL.
In this section, we will explain how to insert, update, and delete data in a temporary table using specific SQL commands.

Temporary tables support the same data operations as regular tables,
but there are some important notes to keep in mind, which we will also cover.

3-1. แทรกข้อมูลลงในตารางชั่วคราว (INSERT)

To add data to a temporary table, use the INSERT INTO statement, just like with a regular table.

ไวยากรณ์พื้นฐาน

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

ตัวอย่าง: เพิ่มข้อมูลผู้ใช้

CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    email VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO temp_users (name, email) 
VALUES 
('Taro Tanaka', 'tanaka@example.com'),
('Hanako Sato', 'sato@example.com');

แทรกข้อมูลที่มีอยู่โดยใช้ INSERT…SELECT

You can also fetch data from an existing table and insert it into a temporary table.

INSERT INTO temp_users (id, name, email)
SELECT id, name, email FROM users WHERE status = 'active';

This method lets you store only active users in a temporary table.

3-2. ปรับปรุงข้อมูลในตารางชั่วคราว (UPDATE)

To change data in a temporary table, use the UPDATE statement.

ไวยากรณ์พื้นฐาน

UPDATE temp_table_name 
SET column_name = value
WHERE condition;

ตัวอย่าง: ปรับปรุงชื่อผู้ใช้

UPDATE temp_users 
SET name = 'Ichiro Tanaka'
WHERE email = 'tanaka@example.com';

ปรับปรุงหลายแถวตามเงื่อนไขที่ตรงกัน

For example, if you want to change email addresses under a specific domain to example.jp, you can write:

UPDATE temp_users 
SET email = REPLACE(email, 'example.com', 'example.jp')
WHERE email LIKE '%@example.com';

3-3. ลบข้อมูลจากตารางชั่วคราว (DELETE)

To delete data, use the DELETE statement.

ไวยากรณ์พื้นฐาน

DELETE FROM temp_table_name WHERE condition;

ตัวอย่าง: ลบข้อมูลของผู้ใช้เฉพาะ

DELETE FROM temp_users WHERE email = 'tanaka@example.com';

ลบทุกแถว (ความแตกต่างจาก TRUNCATE)

If you want to delete all rows, you can write:

DELETE FROM temp_users;

In contrast, for regular tables, you can often delete all rows faster using TRUNCATE TABLE. However, you cannot use TRUNCATE on a temporary table in MySQL.

TRUNCATE TABLE temp_users; -- Error (cannot be used on temporary tables in MySQL)

Therefore, to remove all rows from a temporary table, you must use DELETE.

3-4. หมายเหตุเมื่อจัดการข้อมูลในตารางชั่วคราว

1) ข้อมูลจะหายไปเมื่อเซสชันสิ้นสุด

A temporary table is automatically removed when the session (connection) ends,
so it is not suitable for use cases that require persistent data storage.

2) ไม่สามารถเข้าถึงจากเซสชันอื่น

A temporary table is valid only within the session that created it, and cannot be accessed from other sessions.

SELECT * FROM temp_users;

หากคุณรัน SQL นี้ในเซสชันอื่น คุณจะได้รับข้อผิดพลาด “Table ‘temp_users’ doesn’t exist”.

3) ดัชนีบนตารางชั่วคราวจะไม่ถูกนำไปใช้โดยอัตโนมัติ

หากคุณสร้างตารางโดยใช้ CREATE TEMPORARY TABLE ... AS SELECT ...,
ดัชนีจากตารางต้นฉบับจะไม่ถูกสืบทอด หากต้องการ คุณสามารถเพิ่มดัชนีด้วยตนเองโดยใช้ ALTER TABLE.

ALTER TABLE temp_users ADD INDEX (email);

สรุป

ในส่วนนี้ เราได้ครอบคลุมการจัดการข้อมูล (INSERT, UPDATE, DELETE) สำหรับตารางชั่วคราว.

✔ สรุปอย่างรวดเร็ว

  • ใช้ INSERT เพื่อเพิ่มข้อมูล ( INSERT INTO ... VALUES / INSERT INTO ... SELECT )
  • ใช้ UPDATE เพื่อแก้ไขข้อมูล (การอัปเดตแบบมีเงื่อนไขและการใช้ REPLACE() )
  • ใช้ DELETE เพื่อลบข้อมูล ( DELETE FROM ... WHERE ; TRUNCATE ไม่ได้รับอนุญาต)
  • ตารางชั่วคราวจะถูกลบเมื่อเซสชันสิ้นสุด
  • ไม่สามารถเข้าถึงจากเซสชันอื่นได้
  • ดัชนีจะไม่ถูกสืบทอดโดยอัตโนมัติ; หากต้องการให้เพิ่มด้วยตนเอง

4. ตารางชั่วคราวของ MySQL ถูกลบโดยอัตโนมัติหรือไม่? วิธีลบตารางเหล่านั้นด้วยตนเอง

บทนำ

ต่างจากตารางปกติ ตารางชั่วคราวของ MySQL (Temporary Table) จะ ถูกลบโดยอัตโนมัติเมื่อเซสชันสิ้นสุด อย่างไรก็ตาม มีบางกรณีที่คุณ อาจต้องลบมันด้วยตนเอง.

ในส่วนนี้ เราจะอธิบาย วิธีการทำงานของการลบอัตโนมัติ และ วิธีลบตารางชั่วคราวด้วยตนเอง อย่างละเอียด.

4-1. วิธีการทำงานของการลบอัตโนมัติสำหรับตารางชั่วคราว

1) ถูกลบโดยอัตโนมัติเมื่อเซสชันสิ้นสุด

ตารางชั่วคราวของ MySQL จะถูกลบโดยอัตโนมัติเมื่อเซสชัน (การเชื่อมต่อฐานข้อมูล) ที่สร้างมันสิ้นสุด
ด้วยเหตุนี้ คุณมักไม่จำเป็นต้องลบมันด้วยตนเอง.

ตัวอย่าง: การลบอัตโนมัติเมื่อเซสชันสิ้นสุด
-- Create a temporary table in a new session
CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    email VARCHAR(100)
);

-- Insert data
INSERT INTO temp_users (name, email) VALUES ('Taro Tanaka', 'tanaka@example.com');

-- End the session (disconnect the MySQL client)
EXIT;

ในจุดนี้ ตารางชั่วคราว temp_users จะถูกลบโดยอัตโนมัติ.

2) ตารางชั่วคราวจะคงอยู่ตราบใดที่เซสชันยังดำเนินอยู่

เนื่องจากตารางชั่วคราวจัดการตามเซสชัน จึงไม่ถูกลบตราบใดที่เซสชันยังเปิดอยู่.

SELECT * FROM temp_users; -- Data can be retrieved if the session is still active

กล่าวคือ ตารางชั่วคราวจะคงอยู่ในหน่วยความจำจนกว่าคุณจะปิดไคลเอนต์ MySQL (หรือโปรแกรมตัดการเชื่อมต่อ).

4-2. วิธีลบตารางชั่วคราวด้วยตนเอง

คุณก็สามารถลบตารางชั่วคราวด้วยตนเองได้เช่นกัน
ใน MySQL ให้ใช้ DROP TEMPORARY TABLE เพื่อลบตารางชั่วคราว.

1) ใช้ DROP TEMPORARY TABLE

DROP TEMPORARY TABLE temp_users;

คำสั่งนี้จะลบตารางชั่วคราว temp_users ทันที.

2) เพิ่ม IF EXISTS เพื่อหลีกเลี่ยงข้อผิดพลาด

หากตารางไม่มีอยู่ คุณสามารถใช้ IF EXISTS เพื่อหลีกเลี่ยงข้อผิดพลาด.

DROP TEMPORARY TABLE IF EXISTS temp_users;

ไวยากรณ์นี้จะป้องกันข้อผิดพลาดแม้ว่าตารางจะไม่มีอยู่.

3) แตกต่างจาก DROP TABLE ปกติ

หากคุณพยายามลบตารางชั่วคราวด้วย DROP TABLE ปกติ คุณอาจพบข้อผิดพลาดเช่นต่อไปนี้:

DROP TABLE temp_users;

ข้อผิดพลาด:

ERROR 1051 (42S02): Unknown table 'temp_users'

เนื่องจาก MySQL จัดการตารางปกติและตารางชั่วคราวแยกกัน คุณต้องใช้ DROP TEMPORARY TABLE เมื่อลบตารางชั่วคราว.

4-3. วิธีตรวจสอบว่าตารางชั่วคราวถูกลบแล้วหรือไม่

1) ไม่สามารถยืนยันด้วย SHOW TABLES

ตารางชั่วคราวจะไม่ปรากฏในผลลัพธ์ของ SHOW TABLES.

SHOW TABLES;

ตารางชั่วคราวจะไม่แสดงในรายการ

2) ยืนยันโดยใช้ INFORMATION_SCHEMA

คุณสามารถตรวจสอบว่าตารางชั่วคราวมีอยู่หรือไม่โดยการสอบถาม INFORMATION_SCHEMA.

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = DATABASE() 
AND TABLE_NAME = 'temp_users';

หากคิวรีนี้คืนผลลัพธ์ จะหมายความว่าตารางชั่วคราวมีอยู่.

4-4. หมายเหตุเมื่อทำการลบตารางชั่วคราว

1) ตารางชั่วคราวแตกต่างตามเซสชัน

คุณสามารถสร้างตารางชั่วคราวที่มีชื่อเดียวกันในหลายเซสชันได้
คุณไม่สามารถลบตารางชั่วคราวที่สร้างโดยเซสชันอื่น.

ตัวอย่าง
-- Created in session A
CREATE TEMPORARY TABLE temp_data (id INT);

-- Attempt to drop in session B
DROP TEMPORARY TABLE temp_data;

เกิดข้อผิดพลาด:

ERROR 1051 (42S02): Unknown table 'temp_data'

ตารางชั่วคราวสามารถลบได้เฉพาะในเซสชันที่สร้างมัน.

2) ความขัดแย้งที่อาจเกิดกับตารางปกติที่มีชื่อเดียวกัน

หากตารางชั่วคราวมีชื่อเดียวกับตารางปกติ, ตารางชั่วคราวจะมีลำดับความสำคัญสูงกว่าและตารางปกติจะไม่ปรากฏ.

ตัวอย่าง
-- A regular table (users) exists
SELECT * FROM users;

-- Create a temporary table with the same name
CREATE TEMPORARY TABLE users (id INT, name VARCHAR(50));

-- This now references the temporary table users
SELECT * FROM users;

วิธีแก้:

  • ใช้ คำนำหน้าเช่น temp_ สำหรับตารางชั่วคราวเพื่อหลีกเลี่ยงการชนชื่อ.

สรุป

ในส่วนนี้ เราได้อธิบายวิธีการลบตารางชั่วคราวและวิธีการลบตารางเหล่านั้น.

✔ สรุปสั้น

  • ตารางชั่วคราวจะถูกลบโดยอัตโนมัติเมื่อเซสชันสิ้นสุด
  • ตารางเหล่านี้คงอยู่ตราบใดที่เซสชันยังทำงานอยู่
  • หากต้องการลบด้วยตนเอง ให้ใช้ DROP TEMPORARY TABLE
  • เพิ่ม IF EXISTS เพื่อหลีกเลี่ยงข้อผิดพลาด
  • คุณไม่สามารถตรวจสอบตารางชั่วคราวด้วย SHOW TABLES
  • คุณสามารถลบตารางชั่วคราวได้เฉพาะในเซสชันที่สร้างมัน
  • ใช้คำนำหน้าเพื่อหลีกเลี่ยงการชนกับตารางปกติที่มีชื่อเดียวกัน

5. 5 กรณีการใช้งานจริงของ MySQL Temporary Tables (รวมถึงการเพิ่มประสิทธิภาพ)

บทนำ

ตารางชั่วคราวของ MySQL ช่วยให้คุณเก็บข้อมูลระหว่างขั้นตอนและทำให้คิวรีที่ซับซ้อนง่ายขึ้น, ช่วย ปรับปรุงประสิทธิภาพของฐานข้อมูล.

ในส่วนนี้ เราแนะนำ ห้ากรณีการใช้งานจริงของตารางชั่วคราว. เราอธิบายวิธีการใช้ในสถานการณ์จริงพร้อมตัวอย่าง SQL.

5-1. ปรับประสิทธิภาพคิวรี (ลดภาระการ JOIN)

ปัญหา

เมื่อประมวลผลชุดข้อมูลขนาดใหญ่ การทำ JOIN โดยตรงอาจทำให้ประสิทธิภาพลดลง.

วิธีแก้

ใช้ตารางชั่วคราวเพื่อกรองข้อมูลเป้าหมายล่วงหน้าก่อนทำการ JOIN, ลดภาระการประมวลผล.

ตัวอย่าง: ดึงข้อมูลคำสั่งซื้อสำหรับผู้ใช้ที่ใช้งานอยู่
-- First, store only active users in a temporary table
CREATE TEMPORARY TABLE temp_active_users AS
SELECT id, name FROM users WHERE status = 'active';

-- Perform JOIN using the temporary table
SELECT o.order_id, t.name, o.total_price
FROM orders o
JOIN temp_active_users t ON o.customer_id = t.id;
ประโยชน์
  • ลดภาระการ JOIN โดยมุ่งเป้าเฉพาะ ผู้ใช้ที่ใช้งานอยู่ แทนตาราง users ทั้งหมด
  • ทำให้คิวรีหลักง่ายขึ้น , เพิ่มความอ่านง่าย

5-2. การประมวลผลการรวมชั่วคราว

ปัญหา

การรันคิวรีการรวมเดิมหลายครั้งอาจทำให้ประสิทธิภาพลดลง.

วิธีแก้

เก็บผลลัพธ์การรวมไว้ในตารางชั่วคราวหนึ่งครั้งเพื่อ หลีกเลี่ยงการคำนวณซ้ำที่ไม่จำเป็น.

ตัวอย่าง: เก็บข้อมูลการขายรายเดือนในตารางชั่วคราว
-- Calculate monthly total sales and store in a temporary table
CREATE TEMPORARY TABLE temp_monthly_sales AS
SELECT DATE_FORMAT(order_date, '%Y-%m') AS month, SUM(total_price) AS total_sales
FROM orders
GROUP BY month;

-- Retrieve aggregated results
SELECT * FROM temp_monthly_sales WHERE total_sales > 100000;
ประโยชน์
  • ใช้ข้อมูลที่รวมแล้วหลายครั้ง
  • ปรับปรุงประสิทธิภาพโดยหลีกเลี่ยงการคำนวณซ้ำ

5-3. เก็บข้อมูลระหว่างขั้นตอนสำหรับการประมวลผลแบบแบตช์

ปัญหา

เมื่อทำการอัปเดตหรือลบข้อมูลจำนวนมาก ข้อผิดพลาดระหว่างการประมวลผลอาจทำให้ข้อมูลอยู่ในสถานะที่ไม่สอดคล้องกัน

แนวทางแก้ไข

ใช้ตารางชั่วคราวเพื่อเก็บข้อมูลกลางและรักษาความสอดคล้องของข้อมูล

ตัวอย่าง: อัปเดตข้อมูลคำสั่งภายใต้เงื่อนไขเฉพาะ
-- Store target rows in a temporary table
CREATE TEMPORARY TABLE temp_orders AS
SELECT order_id, total_price FROM orders WHERE status = 'pending';

-- Perform update based on the temporary table
UPDATE orders o
JOIN temp_orders t ON o.order_id = t.order_id
SET o.total_price = t.total_price * 1.1; -- Increase price by 10%
ประโยชน์
  • อัปเดตข้อมูลที่เลือกไว้อย่างปลอดภัย
  • ตรวจสอบข้อมูลก่อนและหลังการอัปเดตได้ง่าย

5-4. การจัดการข้อมูลชั่วคราวเฉพาะผู้ใช้

ปัญหา

หากเก็บข้อมูลชั่วคราวเฉพาะผู้ใช้ในตารางปกติ ข้อมูลที่ไม่จำเป็นอาจสะสมตามเวลา

แนวทางแก้ไข

ตารางชั่วคราวจะลบข้อมูลโดยอัตโนมัติเมื่อเซสชันสิ้นสุดลง ซึ่งช่วยลดภาระการบำรุงรักษา

ตัวอย่าง: เก็บผลการค้นหาในตารางชั่วคราว
-- Store user-specific search results
CREATE TEMPORARY TABLE temp_search_results AS
SELECT * FROM products WHERE category = 'electronics';

-- Display search results
SELECT * FROM temp_search_results;
ประโยชน์
  • ข้อมูลถูกลบโดยอัตโนมัติเมื่อเซสชันสิ้นสุด
  • ผลการค้นหาชั่วคราวสามารถนำกลับมาใช้ใหม่ในระหว่างเซสชัน

5-5. การเลือกระหว่างตารางชั่วคราวและมุมมอง

ปัญหา

เมื่อปรับปรุงประสิทธิภาพของคำสั่งค้นหาที่เรียกใช้บ่อย คุณอาจสงสัยว่าจะใช้ตารางชั่วคราวหรือ VIEW โดยเฉพาะหากต้องการเก็บข้อมูลชั่วคราว

แนวทางแก้ไข

  • หากข้อมูลไม่เปลี่ยนแปลงบ่อยใช้มุมมอง (VIEW)
  • หากข้อมูลเปลี่ยนแปลงบ่อยหรือต้องการการ materializeใช้ตารางชั่วคราว
ตัวอย่าง: การใช้ตารางชั่วคราว
CREATE TEMPORARY TABLE temp_high_value_customers AS
SELECT customer_id, SUM(total_price) AS total_spent
FROM orders
GROUP BY customer_id
HAVING total_spent > 50000;

SELECT * FROM temp_high_value_customers;
ตัวอย่าง: การใช้มุมมอง
CREATE VIEW high_value_customers AS
SELECT customer_id, SUM(total_price) AS total_spent
FROM orders
GROUP BY customer_id
HAVING total_spent > 50000;
ประโยชน์
  • ตารางชั่วคราวเก็บข้อมูลทางกายภาพ ซึ่งสามารถปรับปรุงประสิทธิภาพ
  • มุมมองสะดวกสำหรับการนำคำสั่งค้นหากลับมาใช้ใหม่ แต่ประสิทธิภาพอาจลดลงกับชุดข้อมูลขนาดใหญ่

สรุป

ในส่วนนี้ เราได้แนะนำกรณีใช้งานจริงห้าประการสำหรับตารางชั่วคราวของ MySQL

✔ สรุปสั้นๆ

  1. ปรับปรุงประสิทธิภาพการค้นหา (ลดภาระ JOIN) → เก็บเฉพาะข้อมูลที่จำเป็นในตารางชั่วคราวก่อนทำ JOIN
  2. การประมวลผลการรวมกลุ่มชั่วคราว → เก็บผลการรวมกลุ่มเพื่อหลีกเลี่ยงการคำนวณซ้ำ
  3. ข้อมูลกลางสำหรับการประมวลผลแบบกลุ่ม → จัดการการอัปเดตขนาดใหญ่ได้อย่างปลอดภัย
  4. การจัดการข้อมูลชั่วคราวเฉพาะผู้ใช้ → ข้อมูลถูกลบโดยอัตโนมัติเมื่อเซสชันสิ้นสุด
  5. เลือกระหว่างตารางชั่วคราวและมุมมอง → ใช้ตารางชั่วคราวสำหรับข้อมูลที่เปลี่ยนแปลง มุมมองสำหรับการนำคำสั่งค้นหาที่เสถียรกลับมาใช้ใหม่

6. สามข้อควรระวังสำคัญสามประการเมื่อใช้ตารางชั่วคราวของ MySQL อย่างปลอดภัย

บทนำ

ตารางชั่วคราวของ MySQL ทำงานอย่างอิสระในแต่ละเซสชันและถูกลบโดยอัตโนมัติภายใต้เงื่อนไขบางประการ ทำให้เป็นคุณสมบัติที่สะดวก อย่างไรก็ตาม การใช้งานที่ไม่เหมาะสมอาจนำไปสู่การลดประสิทธิภาพหรือข้อผิดพลาดที่ไม่คาดคิด

ในส่วนนี้ เราอธิบายสามข้อควรระวังสำคัญเพื่อให้แน่ใจในการใช้งานตารางชั่วคราวอย่างปลอดภัย

6-1. ข้อควรระวังข้อ 1: อย่าพึ่งพาการลบโดยอัตโนมัติมากเกินไป

ปัญหา

เนื่องจากตารางชั่วคราวถูกลบโดยอัตโนมัติเมื่อเซสชันสิ้นสุด อาจดูไม่จำเป็นที่จะต้องลบ它们อย่างชัดเจน อย่างไรก็ตาม สิ่งนี้อาจทำให้เกิดปัญหาที่ไม่ตั้งใจในบางครั้ง

ตัวอย่างของปัญหา

  • การเชื่อมต่อที่ทำงานเป็นเวลานานยังคงใช้หน่วยความจำ
  • หากเซสชันเปิดค้างอยู่ ตารางชั่วคราวจะไม่ถูกลบและยังคงใช้ทรัพยากรฐานข้อมูลต่อไป
  • การไม่ลบอย่างชัดเจนอาจทำให้เกิดข้อบกพร่องในการออกแบบ
  • หากกระบวนการแบตช์เชื่อมต่อใหม่โดยไม่คาดคิด ตารางชั่วคราวอาจหายไปและทำให้เกิดข้อผิดพลาด

วิธีแก้

  • ลบตารางชั่วคราวอย่างชัดเจนเมื่อไม่ต้องการใช้แล้วโดยใช้ DROP TEMPORARY TABLE
  • ในการเชื่อมต่อที่ทำงานเป็นเวลานาน (เช่น งานแบตช์) ควรลบตารางชั่วคราวเป็นระยะ
ตัวอย่าง: ลบตารางชั่วคราวอย่างชัดเจน
DROP TEMPORARY TABLE IF EXISTS temp_users;

ประเด็นสำคัญ

  • การเพิ่ม IF EXISTS จะป้องกันข้อผิดพลาดหากตารางไม่มีอยู่.

6-2. ข้อควรระวัง 2: หลีกเลี่ยงการชนชื่อกับตารางปกติ

ปัญหา

คุณสามารถสร้างตารางชั่วคราวที่มีชื่อเดียวกับตารางปกติได้ อย่างไรก็ตามเมื่อทำเช่นนั้น ตารางปกติจะกลายเป็น มองไม่เห็นชั่วคราว.

ตัวอย่างของปัญหา

-- A regular users table exists
SELECT * FROM users;

-- Create a temporary table with the same name
CREATE TEMPORARY TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

-- This now returns data from the temporary table, not the regular one
SELECT * FROM users;

ตราบใดที่ตารางชั่วคราวยังคงอยู่, ตารางปกติที่มีชื่อเดียวกันจะถูกซ่อน ซึ่งอาจทำให้เกิดข้อผิดพลาดในการดึงข้อมูลที่ไม่คาดคิด.

วิธีแก้

  • ใช้คำนำหน้าเช่น “temp_” สำหรับชื่อตารางชั่วคราว
  • กำหนดแนวทางการตั้งชื่อที่ชัดเจนเพื่อแยกแยะระหว่างตารางชั่วคราวและตารางปกติ
ตัวอย่าง: การสร้างตารางชั่วคราวอย่างปลอดภัย
CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

ประโยชน์

  • การใช้คำนำหน้า temp_ ป้องกันการชนกับตาราง users ปกติ
  • ทำให้แยกแยะตารางในโค้ดแอปพลิเคชันได้ง่ายขึ้น

6-3. ข้อควรระวัง 3: ดัชนีและข้อจำกัดจะไม่ถูกสืบทอดโดยอัตโนมัติ

ปัญหา

หากคุณสร้างตารางโดยใช้ CREATE TEMPORARY TABLE ... AS SELECT ... ดัชนีและข้อจำกัดจากตารางต้นฉบับจะไม่ถูกสืบทอด ซึ่งอาจทำให้ประสิทธิภาพลดลง.

ตัวอย่างของปัญหา

-- Regular users table (with indexes)
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    email VARCHAR(100) UNIQUE,
    name VARCHAR(50)
);

-- Create temporary table (indexes are NOT inherited)
CREATE TEMPORARY TABLE temp_users AS
SELECT id, email, name FROM users;

ในกรณีนี้, ข้อจำกัด PRIMARY KEY และ UNIQUE จะไม่ถูกนำไปยัง temp_users ซึ่งอาจทำให้การค้นหาช้าลงและอนุญาตให้มีข้อมูลซ้ำได้.

วิธีแก้

  • เพิ่มดัชนีอย่างชัดเจนหลังจากสร้างตารางชั่วคราว
  • หากกำหนดคอลัมน์ด้วยตนเองโดยใช้ CREATE TEMPORARY TABLE ให้ระบุดัชนีในขั้นตอนการสร้าง
ตัวอย่าง: เพิ่มดัชนีด้วยตนเอง
CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    email VARCHAR(100) UNIQUE,
    name VARCHAR(50)
);

ALTER TABLE temp_users ADD INDEX idx_email (email);

วิธีนี้ทำให้คุณสามารถสร้างตารางชั่วคราวที่มีดัชนีคล้ายกับตารางต้นฉบับได้.

สรุป

ในส่วนนี้ เราได้อธิบายข้อควรระวังสำคัญสามประการสำหรับการใช้ตารางชั่วคราวอย่างปลอดภัย.

✔ สรุปสั้น

  1. อย่าอาศัยการลบอัตโนมัติมากเกินไป
  • ลบตารางชั่วคราวอย่างชัดเจนโดยใช้ DROP TEMPORARY TABLE
  • ลบตารางเหล่านั้นเป็นระยะในเซสชันที่ทำงานเป็นเวลานาน
  1. หลีกเลี่ยงการชนชื่อกับตารางปกติ
  • หากมีตารางปกติที่มีชื่อเดียวกัน ตารางชั่วคราวจะมีลำดับความสำคัญเหนือกว่า
  • ใช้คำนำหน้าเช่น temp_ เพื่อแยกแยะอย่างชัดเจน
  1. ดัชนีและข้อจำกัดจะไม่ถูกสืบทอดโดยอัตโนมัติ
  • เมื่อใช้ CREATE TEMPORARY TABLE ... AS SELECT ... ดัชนีจะหายไป
  • เพิ่มดัชนีด้วยตนเองหลังจากสร้าง

โดยคำนึงถึงจุดเหล่านี้ คุณจะสามารถใช้ตารางชั่วคราวของ MySQL อย่างปลอดภัยพร้อมปรับปรุงประสิทธิภาพของฐานข้อมูล.

7. คำถามที่พบบ่อย 10 ข้อ (FAQ) เกี่ยวกับตารางชั่วคราวของ MySQL

บทนำ

ในส่วนนี้เราจะตอบ คำถามที่พบบ่อย 10 ข้อ เกี่ยวกับตารางชั่วคราวของ MySQL
เราจะครอบคลุม วิธีการทำงาน, ข้อจำกัด, ปัจจัยด้านประสิทธิภาพ, และการแก้ไขปัญหา ในสถานการณ์จริง

7-1. คำถามเกี่ยวกับสเปคพื้นฐาน

Q1. ตารางชั่วคราวสามารถเข้าถึงจากเซสชันอื่นได้หรือไม่?

A. ไม่ได้, ไม่สามารถทำได้.
ตารางชั่วคราว ใช้ได้เฉพาะในเซสชันที่สร้างมัน และไม่สามารถเข้าถึงจากเซสชันอื่นได้

-- Created in Session A
CREATE TEMPORARY TABLE temp_users (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

-- Attempt to access from Session B (results in error)
SELECT * FROM temp_users;

Error:

ERROR 1146 (42S02): Table 'temp_users' doesn't exist

หากต้องการแชร์ข้อมูลข้ามเซสชัน คุณต้องใช้ ตารางปกติ

Q2. ตารางชั่วคราวถูกจัดเก็บบนดิสก์หรือไม่?

A. โดยทั่วไปจะจัดเก็บในหน่วยความจำ, แต่บางกรณีอาจย้ายไปยังดิสก์.
หากขนาดตารางเกิน tmp_table_size หรือ max_heap_table_size MySQL อาจสร้างตารางชั่วคราวบนดิสก์โดยใช้ InnoDB หรือ MyISAM

SHOW VARIABLES LIKE 'tmp_table_size';

เพื่อเพิ่มประสิทธิภาพ ให้กำหนดค่า tmp_table_size อย่างเหมาะสม

Q3. สามารถสร้างดัชนีบนตารางชั่วคราวได้หรือไม่?

A. ได้, คุณสามารถทำได้.
คุณสามารถกำหนด PRIMARY KEY หรือ INDEX ได้เช่นเดียวกับตารางปกติ

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

ALTER TABLE temp_users ADD INDEX idx_email (email);

อย่างไรก็ตาม หากคุณใช้ CREATE TEMPORARY TABLE ... AS SELECT ... ดัชนีจะไม่ถูกสืบทอด, ดังนั้นต้องเพิ่มดัชนีด้วยตนเอง

7-2. คำถามเกี่ยวกับประสิทธิภาพและพฤติกรรม

Q4. มีการเปลี่ยนแปลงใดกับตารางชั่วคราวใน MySQL 8.0 หรือไม่?

A. MySQL 8.0 แนะนำ Common Table Expressions (CTEs) ด้วยคำสั่ง WITH.
ตั้งแต่ MySQL 8.0 เป็นต้นไป คุณสามารถประมวลผลชุดผลลัพธ์ชั่วคราวโดยใช้ CTEs โดยไม่ต้องสร้างตารางชั่วคราวอย่างชัดเจน

WITH temp_users AS (
    SELECT id, name FROM users WHERE status = 'active'
)
SELECT * FROM temp_users;

การใช้ CTE แทนตารางชั่วคราวสามารถทำให้คำสั่ง SQL ง่ายขึ้นและลดการใช้หน่วยความจำ.

Q5. ความแตกต่างระหว่างตารางชั่วคราวและตาราง MEMORY คืออะไร?

A. ตาราง MEMORY คงอยู่ต่อเนื่องหลังจากเซสชันสิ้นสุด, ส่วนตารางชั่วคราวจะไม่คง.
ตารางชั่วคราวจะถูกลบเมื่อเซสชันสิ้นสุด, ในขณะที่ตาราง MEMORY จะคงอยู่จนกว่าเซิร์ฟเวอร์จะรีสตาร์ท (หรือถูกลบโดยผู้ใช้)

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

ควรใช้แบบไหน?

  • ตารางชั่วคราว: การประมวลผลระยะสั้น, จำกัดอยู่ในเซสชัน
  • ตาราง MEMORY: การเข้าถึงความเร็วสูงพร้อมการคงอยู่ระดับเซิร์ฟเวอร์

7-3. คำถามเกี่ยวกับการลบและการแก้ไขปัญหา

Q6. สามารถลบตารางชั่วคราวด้วย DROP TABLE ได้หรือไม่?

A. ไม่ได้, ต้องใช้ DROP TEMPORARY TABLE.
เมื่อต้องการลบตารางชั่วคราวให้ใช้ DROP TEMPORARY TABLE เสมอ

DROP TEMPORARY TABLE temp_users;

การใช้ DROP TABLE ปกติอาจทำให้เกิดข้อผิดพลาด

Q7. ทำไม SHOW TABLES ไม่แสดงตารางชั่วคราว?

A. ตารางชั่วคราวไม่ได้ถูกแสดงในผลลัพธ์ของ SHOW TABLES.
เพื่อเช็คว่าตารางชั่วคราวมีอยู่หรือไม่ ให้สอบถามจาก INFORMATION_SCHEMA

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = DATABASE() 
AND TABLE_NAME = 'temp_users';

หากไม่มีผลลัพธ์คืนมา แสดงว่าตารางชั่วคราวอาจถูกลบไปแล้ว

สรุป

ในส่วนนี้เราได้ครอบคลุม คำถามที่พบบ่อย 10 ข้อ เกี่ยวกับตารางชั่วคราวของ MySQL

✔ สรุปสั้น ๆ

  1. ตารางชั่วคราวไม่สามารถเข้าถึงจากเซสชันอื่นได้
  2. ตารางถูกสร้างในหน่วยความจำแต่หากมีขนาดใหญ่อาจย้ายไปยังดิสก์
  3. ต้องกำหนดดัชนีด้วยตนเองหากใช้ AS SELECT
  4. CTE (WITH) มีให้ใช้ใน MySQL 8.0+
  5. ไม่เหมือนตาราง MEMORY, ตารางชั่วคราวจะหายไปเมื่อเซสชันสิ้นสุด
  6. ใช้ DROP TEMPORARY TABLE เพื่อลบตารางเหล่านั้น
  7. SHOW TABLES ไม่แสดงตารางชั่วคราว

8. สรุป: ประเด็นสำคัญสำหรับการใช้ตารางชั่วคราวของ MySQL อย่างมีประสิทธิภาพ

บทนำ

MySQL temporary tables are a powerful tool for storing intermediate data and optimizing query performance.
Here, we summarize the key points discussed throughout this guide.

8-1. แนวคิดพื้นฐานของตารางชั่วคราวของ MySQL

ตารางชั่วคราวคืออะไร?

  • มีอยู่แยกจากกันต่อแต่ละเซสชัน
  • ถูกลบโดยอัตโนมัติเมื่อเซสชันสิ้นสุด
  • รองรับ INSERT, UPDATE และ DELETE เช่นเดียวกับตารางปกติ

ไวยากรณ์การสร้างพื้นฐาน

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

กรณีการใช้งานหลัก

  • การจัดเก็บข้อมูลชั่วคราว
  • การเพิ่มประสิทธิภาพการทำงานของคิวรี
  • ตารางกลางสำหรับการประมวลผลแบบแบตช์
  • การจัดการข้อมูลชั่วคราวต่อผู้ใช้

8-2. ข้อดีของตารางชั่วคราว

1) ปรับปรุงประสิทธิภาพการทำงานของคิวรี

  • ลดภาระงานของ JOIN
  • ทำการรวมข้อมูลล่วงหน้าเพื่อลดการคำนวณซ้ำ
  • ทำให้คิวรีง่ายขึ้นโดยการตัดข้อมูลที่ไม่จำเป็นออก
ตัวอย่าง: ลดภาระงานของ JOIN
CREATE TEMPORARY TABLE temp_active_users AS
SELECT id, name FROM users WHERE status = 'active';

SELECT o.order_id, t.name, o.total_price
FROM orders o
JOIN temp_active_users t ON o.customer_id = t.id;

2) การจัดเก็บชั่วคราวและการจัดการตามเซสชัน

  • ถูกลบโดยอัตโนมัติเมื่อเซสชันสิ้นสุด
  • เหมาะสำหรับการจัดเก็บข้อมูลระยะสั้น
  • การจัดการข้อมูลอย่างอิสระโดยไม่กระทบต่อเซสชันอื่น
ตัวอย่าง: การจัดเก็บชั่วคราวของผลการค้นหา
CREATE TEMPORARY TABLE temp_search_results AS
SELECT * FROM products WHERE category = 'electronics';

SELECT * FROM temp_search_results;

3) การอัปเดตข้อมูลอย่างปลอดภัย

  • เป็นประโยชน์เป็นตารางกลางในการประมวลผลแบบแบตช์
  • สามารถทำหน้าที่เป็นสำรองข้อมูลระหว่างการอัปเดตข้อมูล
  • มีประสิทธิภาพในการสร้างชุดข้อมูลทดสอบ
ตัวอย่าง: การอัปเดตข้อมูลอย่างปลอดภัย
CREATE TEMPORARY TABLE temp_orders AS
SELECT order_id, total_price FROM orders WHERE status = 'pending';

UPDATE orders o
JOIN temp_orders t ON o.order_id = t.order_id
SET o.total_price = t.total_price * 1.1;

8-3. ข้อเสียและข้อควรระวัง

1) ข้อมูลหายไปเมื่อเซสชันสิ้นสุด

  • ไม่เหมาะสำหรับการจัดเก็บถาวร
  • ใช้ตารางปกติสำหรับการเก็บข้อมูลระยะยาว

2) ไม่สามารถแชร์ระหว่างเซสชันได้

  • ไม่สามารถเข้าถึงจากการเชื่อมต่ออื่น
  • ใช้ตารางปกติเมื่อแชร์ข้อมูลระหว่างผู้ใช้

3) ดัชนีและข้อจำกัดจะไม่ถูกสืบทอดโดยอัตโนมัติ

  • CREATE TEMPORARY TABLE ... AS SELECT ... จะไม่สร้างดัชนี
  • เพิ่มดัชนีด้วยตนเองหากจำเป็น
    ALTER TABLE temp_users ADD INDEX idx_email (email);
    

8-4. แนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้งานอย่างปลอดภัย

ลบอย่างชัดเจนเมื่อไม่ต้องการใช้งานต่อ

DROP TEMPORARY TABLE IF EXISTS temp_users;

หลีกเลี่ยงการชนกันของชื่อกับตารางปกติ

  • ใช้คำนำหน้า temp_
    CREATE TEMPORARY TABLE temp_users (...);
    

ออกแบบโดยคำนึงถึงประสิทธิภาพ

  • หากตารางขยายใหญ่และย้ายไปดิสก์ ควรพิจารณาปรับค่า tmp_table_size
    SHOW VARIABLES LIKE 'tmp_table_size';
    

8-5. ตารางชั่วคราวเทียบกับทางเลือกอื่น (Views และ CTEs)

It is also important to consider when to use temporary tables versus views (VIEW) or CTEs (Common Table Expressions).

MethodCharacteristicsBest Use Case
Temporary tableRemoved at session endWhen you need to store intermediate data
View (VIEW)Data retrieved in real time; performance may degrade with large datasetsSave and reuse frequently referenced queries
CTE (WITH clause)Virtual table valid only within a single queryHandle temporary data without creating a table

สรุป

ในคู่มือนี้ เราได้ครอบคลุมทุกประเด็นสำคัญของตารางชั่วคราวของ MySQL.

✔ สรุปสั้น

  • ตารางชั่วคราวจะถูกลบโดยอัตโนมัติเมื่อเซสชันสิ้นสุดลง
  • พวกมันช่วยเพิ่มประสิทธิภาพโดยลดภาระการ JOIN และการรวมข้อมูล
  • มีประโยชน์สำหรับการประมวลผลแบบแบตช์, ผลลัพธ์การค้นชั่วคราว, และข้อมูลทดสอบ
  • ไม่สามารถแชร์ระหว่างเซสชันได้, และต้องเพิ่มดัชนีด้วยตนเองเมื่อจำเป็น
  • การเลือกใช้ระหว่างตารางชั่วคราว, วิว, และ CTE ทำให้การจัดการข้อมูลมีความยืดหยุ่น

คุณได้ทำการเสร็จสิ้นทุกส่วนของคู่มือการใช้ตารางชั่วคราวของ MySQL แล้ว! 🎉
ใช้เอกสารอ้างอิงนี้เพื่อใช้ประโยชน์จากตารางชั่วคราวอย่างมีประสิทธิภาพในโครงการ MySQL ของคุณ.