- 1 1. Pendahuluan
- 2 2. Dasar-dasar Tabel Sementara
- 3 3. Cara Membuat Tabel Sementara
- 4 4. Cara Menggunakan Tabel Sementara
- 5 5. Mengelola dan Menghapus Tabel Sementara
- 6 6. Practical Use Cases for Temporary Tables
- 7 7. Alternatives and Limitations of Temporary Tables
- 8 8. FAQ
- 8.1 1. Apakah tabel sementara dapat direferensikan dari sesi lain?
- 8.2 2. Hak istimewa apa yang diperlukan untuk membuat tabel sementara?
- 8.3 3. Apakah tabel sementara memengaruhi penggunaan disk?
- 8.4 4. Apa perbedaan antara tabel sementara dan tabel sementara internal?
- 8.5 5. Dapatkah tabel sementara dibagikan antar thread?
- 8.6 6. Dapatkah tabel sementara mengurangi kinerja?
- 8.7 7. Bagaimana saya dapat meningkatkan kinerja tabel sementara?
- 8.8 Ringkasan
1. Pendahuluan
Saat bekerja dengan MySQL, “tabel sementara” merupakan cara yang berguna untuk menyimpan dan memproses data secara temporer. Dengan menggunakan tabel sementara, Anda dapat menahan data sementara untuk mengurangi beban kueri yang kompleks dan meningkatkan efisiensi pemrosesan batch.
Dalam artikel ini, kami akan menjelaskan apa itu tabel sementara MySQL, beserta kasus penggunaan dan manfaatnya secara detail.
Apa Itu Tabel Sementara?
Tabel sementara adalah tabel yang hanya berlaku dalam satu sesi.
Berbeda dengan tabel biasa, tabel ini tidak disimpan secara permanen di basis data, dan secara otomatis dihapus ketika sesi berakhir.
Karakteristik utama tabel sementara adalah sebagai berikut:
- Tabel ini ada per sesi (tidak dapat diakses dari koneksi lain)
- Secara otomatis dihapus ketika sesi berakhir
- Dapat digunakan tanpa mengganggu meskipun ada tabel biasa dengan nama yang sama
- Sering dipakai untuk meningkatkan kinerja
Tabel sementara sangat cocok untuk analisis data dan pemrosesan data temporer, serta biasanya digunakan sebagai dukungan untuk pemrosesan batch dan tugas agregasi.
Manfaat Menggunakan Tabel Sementara
Menggunakan tabel sementara dapat membuat pemrosesan data lebih efisien. Berikut tiga manfaat utama.
1. Meningkatkan kinerja kueri
Saat menangani sejumlah besar data, penggunaan banyak JOIN dan subkueri dapat membuat pemrosesan menjadi kompleks dan meningkatkan beban basis data. Dengan tabel sementara, Anda dapat menyaring dan menyimpan data terlebih dahulu, sehingga mempercepat eksekusi kueri.
2. Ideal untuk penyimpanan data temporer
Dalam pemrosesan batch atau transformasi data, Anda mungkin perlu menyimpan data secara temporer dan melakukan operasi yang diperlukan. Tabel sementara memungkinkan Anda menyimpan data secara temporer dan mendukung pemrosesan cepat di memori.
3. Menjaga keamanan data yang ada
Memanipulasi data produksi secara langsung berisiko. Dengan menggunakan tabel sementara, Anda dapat memproses data tanpa mengubah data produksi dan mengurangi risiko kesalahan.
Ringkasan
Tabel sementara MySQL adalah alat yang praktis untuk penyimpanan dan pemrosesan data temporer.
- Tabel ini bersifat sesi dan dihapus ketika sesi berakhir
- Berguna untuk peningkatan kinerja dan pemrosesan batch
- Memungkinkan operasi aman tanpa mengubah data produksi
2. Dasar-dasar Tabel Sementara
Tabel sementara MySQL digunakan untuk menyimpan data secara temporer, berbeda dengan tabel biasa. Pada bagian ini, kami akan menjelaskan konsep dasar tabel sementara secara detail, termasuk “perbedaan dengan tabel biasa” dan “perbedaan dengan tabel sementara internal.”
Perbedaan Antara Tabel Sementara dan Tabel Biasa
Tabel sementara dan tabel biasa berbeda secara signifikan dalam retensi data dan perilaku akses. Tabel di bawah ini merangkum perbedaan utama.
| 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) |
Poin-poin utama
- Tabel sementara terisolasi per sesi dan tidak terlihat oleh pengguna lain.
- Anda dapat membuatnya tanpa error meskipun ada tabel biasa dengan nama yang sama.
- Tabel ini dibuat secara eksplisit menggunakan
CREATE TEMPORARY TABLEdan secara otomatis dihapus ketika sesi berakhir.
Perbedaan Antara Tabel Sementara dan Tabel Sementara Internal
Selain tabel sementara yang dibuat pengguna, MySQL juga secara otomatis membuat tabel sementara internal. Kedua jenis tabel ini terdengar serupa, namun tujuan dan pengelolaannya berbeda.
| 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 |
Apa itu tabel sementara internal?
- MySQL dapat secara internal membuat tabel sementara untuk mengoptimalkan kueri tertentu (seperti
GROUP BY,ORDER BY,DISTINCT). - Pengguna akhir tidak dapat mengelolanya secara langsung (Anda tidak dapat membuatnya secara eksplisit seperti
CREATE TEMPORARY TABLE). - Tabel ini dibuat sesuai kebutuhan selama eksekusi kueri dan secara otomatis dihapus ketika kueri selesai.
Contoh yang dapat memicu tabel sementara internal
Saat Anda menjalankan kueri seperti berikut, MySQL dapat membuat tabel sementara internal untuk memprosesnya.
SELECT category, COUNT(*)
FROM products
GROUP BY category
ORDER BY COUNT(*) DESC;
Dalam kasus ini, MySQL dapat membuat tabel sementara internal untuk menyimpan sementara hasil GROUP BY,
dan kemudian menggunakannya untuk menghitung output akhir.
Summary
- Tabel sementara adalah tabel sementara yang dibuat pengguna yang secara otomatis dihapus ketika sesi berakhir.
- Berbeda dengan tabel biasa, tabel ini tidak dapat diakses dari sesi lain .
- Tabel sementara internal dibuat dan dihapus secara otomatis oleh MySQL, dan pengguna tidak dapat mengendalikannya secara langsung.

3. Cara Membuat Tabel Sementara
Anda dapat membuat tabel sementara MySQL menggunakan pernyataan CREATE TEMPORARY TABLE. Pada bagian ini, kami menjelaskan semuanya mulai dari pembuatan dasar hingga membuat satu berdasarkan tabel yang sudah ada.
Cara dasar membuat tabel sementara
Di MySQL, Anda menggunakan CREATE TEMPORARY TABLE untuk membuat tabel sementara.
Sintaks dasar
CREATE TEMPORARY TABLE table_name (
column_name data_type constraints,
column_name data_type constraints,
...
);
Contoh kode
SQL berikut membuat tabel sementara bernama users_temp dengan tiga kolom: id (integer), name (string), dan email (string).
CREATE TEMPORARY TABLE users_temp (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
);
Karena tabel ini secara otomatis dihapus ketika sesi berakhir, itu tidak memengaruhi basis data yang persisten.
Membuat tabel sementara berdasarkan tabel yang ada
Alih-alih membuat tabel sementara dari awal, Anda juga dapat menyalin struktur tabel yang ada untuk membuatnya.
Menggunakan CREATE TEMPORARY TABLE ... SELECT
Di MySQL, Anda dapat membuat tabel sementara berdasarkan hasil pernyataan SELECT.
Sintaks dasar
CREATE TEMPORARY TABLE temp_table_name
SELECT * FROM existing_table_name;
Contoh kode
Sebagai contoh, untuk menyalin struktur data tabel users dan membuat tabel sementara baru users_temp, Anda dapat menulis:
CREATE TEMPORARY TABLE users_temp
SELECT * FROM users;
Dengan metode ini, struktur kolom users dibawa ke users_temp, tetapi kendala seperti PRIMARY KEY dan INDEX tidak disalin.
Jika Anda ingin menyalin hanya struktur tabel tanpa menyertakan data, tambahkan WHERE 1=0.
CREATE TEMPORARY TABLE users_temp
SELECT * FROM users WHERE 1=0;
Dengan SQL ini, definisi kolom users disalin, tetapi tidak ada data yang disertakan.
Catatan saat membuat tabel sementara
1. Tabel sementara bersifat sesi
- Tabel sementara hanya berlaku dalam sesi di mana ia dibuat.
- Tidak dapat diakses dari koneksi lain atau oleh pengguna lain.
2. Anda dapat membuatnya meskipun ada tabel biasa dengan nama yang sama
- Misalnya, meskipun ada tabel biasa bernama
usersdi basis data, Anda dapat membuat tabel sementara bernamausers. - Dalam sesi tersebut, tabel sementara memiliki prioritas dan tabel biasa menjadi tersembunyi.
3. Dampak mesin penyimpanan
- Secara default, tabel sementara menggunakan mesin
MEMORY, tetapi jika ukuran data besar, mereka dapat disimpan di area sementaraInnoDB. - Jika Anda ingin secara eksplisit menentukan mesin
MEMORY, tulis seperti ini:CREATE TEMPORARY TABLE users_temp ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100) ) ENGINE=MEMORY; - Mesin
MEMORYcepat tetapi memiliki batas ukuran data. Untuk dataset besar, pertimbangkan menggunakanInnoDB.
Ringkasan
- Buat tabel sementara menggunakan
CREATE TEMPORARY TABLE. - Anda juga dapat membuatnya dengan menyalin tabel yang ada (
SELECT * FROM). - Mesin
MEMORYdapat cepat, tetapiInnoDBsering lebih baik untuk dataset besar. - Tabel sementara dikelola per sesi dan secara otomatis dihapus ketika sesi berakhir .
4. Cara Menggunakan Tabel Sementara
MySQL temporary tables can be operated like regular tables, including INSERT, UPDATE, DELETE, and SELECT. In this section, we explain each operation in detail.
Menyisipkan 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.
Memperbarui 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;
Menghapus 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.
Memilih 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.
Catatan saat menggunakan tabel sementara
1. Data dihapus ketika sesi berakhir
- 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. Membuat tabel sementara dengan nama yang sama menyebabkan 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. Kendala mesin penyimpanan
- 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 .
Ringkasan
- 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. Mengelola dan Menghapus Tabel Sementara
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.
Cara menghapus tabel sementara
To explicitly drop a temporary table, use the DROP TEMPORARY TABLE statement.
Basic syntax
DROP TEMPORARY TABLE table_name;
Sample code
Sebagai contoh, untuk menghapus tabel sementara bernama users_temp, jalankan:
DROP TEMPORARY TABLE users_temp;
Setelah menjalankan SQL ini, tabel users_temp dihapus dan tidak dapat lagi digunakan dalam sesi.
Automatic drop when the session ends
Tabel sementara secara otomatis dihapus ketika sesi berakhir.
How automatic drop works
- Buat tabel sementara dengan
CREATE TEMPORARY TABLE - Operasikan data tabel tersebut selama sesi aktif
- Ketika sesi (koneksi) ditutup, tabel sementara secara otomatis dihapus
However, be careful in the following cases:
- When sessions remain open for a long time → Tabel sementara yang tidak diperlukan dapat mengonsumsi memori, sehingga disarankan menjalankan
DROP TEMPORARY TABLEsesuai kebutuhan. - When handling large amounts of data → Untuk menghindari tekanan penyimpanan, penting untuk menghapus tabel secara tepat.
Using DROP TEMPORARY TABLE IF EXISTS
Untuk menghindari kesalahan saat menghapus tabel yang mungkin tidak ada, Anda dapat menggunakan IF EXISTS.
Basic syntax
DROP TEMPORARY TABLE IF EXISTS table_name;
Sample code
DROP TEMPORARY TABLE IF EXISTS users_temp;
SQL ini menghapus users_temp jika ada; jika tidak ada, tidak akan menghasilkan kesalahan.
Common errors and fixes
Error 1: “Table not found”
When it happens:
- Saat Anda mencoba menghapus tabel yang tidak ada menggunakan
DROP TEMPORARY TABLE - Karena tabel sementara bersifat sesi, Anda tidak dapat menghapusnya dari sesi lain
Fix:
- Tambahkan
IF EXISTSuntuk menghindari kesalahanDROP TEMPORARY TABLE IF EXISTS users_temp;
- Hapus di dalam sesi yang tepat
Error 2: “Table already exists”
When it happens:
- Saat Anda mencoba membuat tabel sementara dengan nama yang sudah ada
Fix:
- Jalankan
DROP TEMPORARY TABLE IF EXISTSterlebih dahuluDROP 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
- Jalankan
DROP TEMPORARY TABLEsesuai kebutuhan untuk membebaskan tabel yang tidak diperlukan.
- Use
IF EXISTSto avoid errors
DROP TEMPORARY TABLE IF EXISTSmencegah kesalahan saat menghapus tabel yang tidak ada.
- Be mindful of session management
- Sesi yang berlangsung lama dapat menyebabkan tabel sementara mengonsumsi memori, jadi hapuslah sesuai kebutuhan.
- Understand storage engine impact
- Mesin
MEMORYcepat tetapi memiliki batas ukuran data. - Jika Anda menggunakan
InnoDB, Anda perlu mempertimbangkan penggunaan ruang disk.
Summary
- Anda dapat secara eksplisit menghapus tabel sementara menggunakan
DROP TEMPORARY TABLE. - Mereka secara otomatis dihapus ketika sesi berakhir, tetapi untuk sesi yang berlangsung lama, pembersihan manual disarankan.
DROP TEMPORARY TABLE IF EXISTSmembantu mencegah kesalahan saat menghapus.- Penting untuk mengetahui cara menangani kesalahan “Table not found” dan “Table already exists”.
6. Practical Use Cases for Temporary Tables
Tabel sementara MySQL digunakan untuk membuat penyimpanan dan pemrosesan data sementara lebih efisien. Pada bagian ini, kami memperkenalkan skenario umum di mana tabel sementara berguna dan menjelaskan detail implementasinya.
1. Using as an intermediate table for aggregation
Dalam analisis data dan pembuatan laporan, memproses dataset besar secara langsung dapat memperlambat eksekusi query. Dengan menggunakan tabel sementara, Anda dapat mengatur data terlebih dahulu dan kemudian memprosesnya, meningkatkan kinerja.
Scenario
- Tabel
salesberisi data penjualan selama satu tahun. - Anda ingin menghitung total penjualan bulanan dan melakukan analisis lebih lanjut.
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;
-- Komit transaksi
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
- Jika Anda tidak menentukan
PRIMARY KEYatauINDEXdalamCREATE TEMPORARY TABLE, mereka tidak dibuat secara otomatis. - Jika Anda memerlukan indeks pada tabel sementara, Anda harus membuatnya secara manual.
4. Mesin penyimpanan default adalah MEMORY
- Dengan mesin
MEMORY, ukuran data yang besar dapat menyebabkan swapping ke disk dan menurunkan kinerja. - Jika Anda menentukan
InnoDB, ia dapat menangani data yang lebih besar, tetapi penggunaan disk meningkat.
5. Tidak terpengaruh oleh transaksi
- Tabel sementara tidak terpengaruh oleh
ROLLBACK. - Oleh karena itu, mereka tidak cocok untuk pemrosesan yang memerlukan konsistensi transaksi yang ketat.
Alternatif untuk tabel sementara
Untuk menghindari keterbatasan ini, Anda dapat menggunakan view atau subquery alih‑alih tabel sementara untuk penanganan data yang lebih fleksibel.
1. Gunakan view
View dapat digunakan serupa dengan tabel sementara untuk referensi data sementara. View berfungsi sebagai tabel virtual dan tidak memerlukan penyimpanan data sementara, yang membantu menghindari batasan penyimpanan.
Buat view
CREATE VIEW active_users AS
SELECT id, name, email FROM users WHERE last_login >= NOW() - INTERVAL 1 YEAR;
Gunakan view
SELECT * FROM active_users;
Keuntungan menggunakan view
✅ Tidak menggunakan penyimpanan (data direferensikan secara langsung, tidak perlu disimpan sementara)
✅ Tidak bergantung pada sesi (tersedia untuk pengguna dan koneksi lain)
✅ Skema dapat dipertahankan (Anda dapat meninjau definisinya dengan SHOW CREATE VIEW)
Kerugian menggunakan view
❌ Sulit untuk memperbarui (INSERT atau UPDATE langsung pada view dibatasi)
❌ Kinerja dapat menurun untuk dataset besar
2. Gunakan subquery
Anda juga dapat menggunakan subquery untuk memproses data sementara tanpa membuat tabel sementara.
Menggunakan tabel sementara
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;
Menggunakan subquery
SELECT product_id, SUM(amount) AS total_sales
FROM orders
GROUP BY product_id
ORDER BY total_sales DESC
LIMIT 10;
Keuntungan menggunakan subquery
✅ Kinerja lebih baik karena Anda tidak membuat tabel sementara
✅ Tidak menggunakan penyimpanan
✅ Tidak bergantung pada sesi dan dapat dijalankan kapan saja
Kerugian menggunakan subquery
❌ Keterbacaan dapat menurun untuk query yang kompleks
❌ Sulit untuk menggunakan kembali data (Anda mungkin perlu mereferensikan data yang sama berulang kali)
3. Gunakan CTE (klausa WITH)
Di MySQL 8.0 dan versi selanjutnya, Anda dapat menggunakan CTE (Common Table Expression) untuk menangani data secara sementara tanpa membuat tabel sementara.
Contoh 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;
Keuntungan menggunakan CTE
✅ Meningkatkan keterbacaan (sering lebih mudah dibaca dibandingkan subquery)
✅ Dapat mengoptimalkan kinerja (pemrosesan bergaya sementara tanpa membuat tabel sementara)
Kerugian menggunakan CTE
❌ Tidak tersedia di MySQL 5.x (hanya didukung di MySQL 8.0 dan versi selanjutnya)
Ringkasan
| 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. FAQ
Berikut adalah pertanyaan yang sering diajukan tentang tabel sementara MySQL. Kami harap ini membantu menjelaskan cara kerjanya dan keterbatasannya.
1. Apakah tabel sementara dapat direferensikan dari sesi lain?
Tidak, mereka tidak dapat.
Tabel sementara hanya tersedia dalam sesi tempat tabel tersebut dibuat. Sesi lain tidak dapat mengaksesnya. Bahkan jika pengguna lain membuat tabel sementara dengan nama yang sama, setiap sesi memperlakukan tabel tersebut sebagai tabel yang independen.
2. Hak istimewa apa yang diperlukan untuk membuat tabel sementara?
Untuk membuat tabel sementara, Anda memerlukan hak istimewa CREATE TEMPORARY TABLES pada basis data.
Untuk memberikan hak istimewa kepada pengguna, jalankan SQL berikut:
GRANT CREATE TEMPORARY TABLES ON database_name.* TO 'user_name'@'host';
Anda juga dapat memeriksa hak istimewa saat ini menggunakan SHOW GRANTS.
SHOW GRANTS FOR 'user_name'@'host';
3. Apakah tabel sementara memengaruhi penggunaan disk?
Ya, mereka dapat.
Secara default, tabel sementara MySQL menggunakan mesin MEMORY, tetapi ketika ukuran data melebihi ambang tertentu, mereka disimpan di area sementara InnoDB.
Saat menangani kumpulan data besar, tabel sementara dapat mengonsumsi ruang disk. Oleh karena itu, disarankan untuk menghapusnya secara eksplisit ketika tidak lagi diperlukan.
DROP TEMPORARY TABLE IF EXISTS table_name;
Untuk meminimalkan dampak pada disk, jika Anda mengharapkan volume data yang besar, pertimbangkan membuat tabel sementara dengan InnoDB alih‑alih MEMORY.
CREATE TEMPORARY TABLE table_name (
column1 data_type,
column2 data_type
) ENGINE=InnoDB;
4. Apa perbedaan antara tabel sementara dan tabel sementara internal?
| 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. Dapatkah tabel sementara dibagikan antar thread?
Tidak, mereka tidak dapat.
Tabel sementara hanya berlaku dalam thread (sesi) tempat ia dibuat, dan tidak dapat diakses dari thread atau proses lain.
Jika Anda perlu berbagi data antar sesi/thread, Anda harus membuat tabel reguler sebagai gantinya.
CREATE TABLE shared_temp_table (
id INT PRIMARY KEY,
data VARCHAR(255)
);
6. Dapatkah tabel sementara mengurangi kinerja?
Ya, dalam beberapa kasus.
Secara khusus, berhati‑hati dalam situasi berikut:
- Ketika volume data terlalu besar
- Mesin
MEMORYmemiliki batas ukuran; di luar itu, data dapat berpindah keInnoDB, yang dapat mengurangi kinerja . - Mitigasi: Jika Anda memperkirakan akan melampaui batas
MEMORY, buat tabel denganInnoDBsejak awal. - Ketika indeks yang tepat tidak ditetapkan
- Tabel yang dibuat dengan
CREATE TEMPORARY TABLE ... SELECTtidak menyalin indeks, sehingga pencarian dapat menjadi lebih lambat. - Mitigasi: Tambahkan indeks sesuai kebutuhan menggunakan
ALTER TABLE.ALTER TABLE temp_table_name ADD INDEX (column_name);
7. Bagaimana saya dapat meningkatkan kinerja tabel sementara?
Untuk meningkatkan kinerja tabel sementara, pendekatan berikut efektif:
✅ Gunakan mesin MEMORY (cepat untuk kumpulan data kecil)
CREATE TEMPORARY TABLE table_name (
id INT PRIMARY KEY,
name VARCHAR(50)
) ENGINE=MEMORY;
✅ Pilih hanya kolom yang diperlukan (abaikan kolom yang tidak diperlukan)
CREATE TEMPORARY TABLE users_temp AS
SELECT id, name FROM users;
✅ Tambahkan indeks yang tepat (mempercepat pencarian)
ALTER TABLE users_temp ADD INDEX (name);
✅ Hapus segera setelah tidak lagi diperlukan (bebaskan memori)
DROP TEMPORARY TABLE IF EXISTS users_temp;
Ringkasan
- Tabel sementara tidak dapat direferensikan dari sesi atau thread lain
- Anda memerlukan hak istimewa
CREATE TEMPORARY TABLESuntuk membuatnya - Jika data menjadi terlalu besar, MySQL dapat beralih dari
MEMORYkeInnoDB, yang dapat mengurangi kinerja - Menambahkan indeks yang tepat dapat mempercepat kueri
- Menghapus tabel sementara dengan
DROP TEMPORARY TABLEdisarankan ketika tidak lagi diperlukan
Ini menyelesaikan penjelasan rinci tentang tabel sementara MySQL, dari konsep dasar hingga kasus penggunaan, keterbatasan, alternatif, dan FAQ.
Dengan menggunakan tabel sementara secara tepat, Anda dapat secara signifikan meningkatkan efisiensi pemrosesan data.


