Tabel Sementara MySQL: Cara Kerjanya, Manfaat, dan Praktik Terbaik

目次

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.

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)

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 TABLE dan 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.

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

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 users di basis data, Anda dapat membuat tabel sementara bernama users .
  • 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 sementara InnoDB.
  • 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 MEMORY cepat tetapi memiliki batas ukuran data. Untuk dataset besar, pertimbangkan menggunakan InnoDB.

Ringkasan

  • Buat tabel sementara menggunakan CREATE TEMPORARY TABLE .
  • Anda juga dapat membuatnya dengan menyalin tabel yang ada (SELECT * FROM ).
  • Mesin MEMORY dapat cepat, tetapi InnoDB sering 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 EXISTS beforehand. DROP TEMPORARY TABLE IF EXISTS users_temp; CREATE TEMPORARY TABLE users_temp (...);

3. Kendala mesin penyimpanan

  • 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 .

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 EXISTS beforehand helps avoid name-conflict errors.
  • For large datasets, using an InnoDB temporary 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

  1. Buat tabel sementara dengan CREATE TEMPORARY TABLE
  2. Operasikan data tabel tersebut selama sesi aktif
  3. 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 TABLE sesuai 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 EXISTS untuk menghindari kesalahan
    DROP 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 EXISTS terlebih dahulu
    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
  • Jalankan DROP TEMPORARY TABLE sesuai kebutuhan untuk membebaskan tabel yang tidak diperlukan.
  1. Use IF EXISTS to avoid errors
  • DROP TEMPORARY TABLE IF EXISTS mencegah kesalahan saat menghapus tabel yang tidak ada.
  1. Be mindful of session management
  • Sesi yang berlangsung lama dapat menyebabkan tabel sementara mengonsumsi memori, jadi hapuslah sesuai kebutuhan.
  1. Understand storage engine impact
  • Mesin MEMORY cepat 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 EXISTS membantu 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 sales berisi 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 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;

-- 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 KEY atau INDEX dalam CREATE 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

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. 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?

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. 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 MEMORY memiliki batas ukuran; di luar itu, data dapat berpindah ke InnoDB, yang dapat mengurangi kinerja .
  • Mitigasi: Jika Anda memperkirakan akan melampaui batas MEMORY, buat tabel dengan InnoDB sejak awal.
  • Ketika indeks yang tepat tidak ditetapkan
  • Tabel yang dibuat dengan CREATE TEMPORARY TABLE ... SELECT tidak 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 TABLES untuk membuatnya
  • Jika data menjadi terlalu besar, MySQL dapat beralih dari MEMORY ke InnoDB, yang dapat mengurangi kinerja
  • Menambahkan indeks yang tepat dapat mempercepat kueri
  • Menghapus tabel sementara dengan DROP TEMPORARY TABLE disarankan 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.