← Kursa Dön
📄 Text · 25 min

Temporary Tablolar

Giriş — Oturum Bazlı Geçici Depolama

Temporary tablolar (geçici tablolar), sadece mevcut veritabanı oturumu süresince yaşar. Oturum kapandığında otomatik silinir. Karmaşık sorguların ara sonuçlarını tutmak, performans iyileştirme ve veri dönüşümü için idealdir.


Oluşturma ve Kullanım

-- Geçici tablo oluştur
CREATE TEMPORARY TABLE temp_bestsellers (
    product_id INT UNSIGNED,
    product_name VARCHAR(200),
    total_sold INT UNSIGNED,
    revenue DECIMAL(12,2)
);

-- Veri ekle
INSERT INTO temp_bestsellers
SELECT p.product_id, p.product_name, SUM(oi.quantity), SUM(oi.quantity * oi.unit_price)
FROM products p
INNER JOIN order_items oi ON p.product_id = oi.product_id
GROUP BY p.product_id, p.product_name;

-- Geçici tabloyu sorgula
SELECT * FROM temp_bestsellers ORDER BY total_sold DESC LIMIT 10;

-- Başka sorgularda kullan
SELECT c.category_name, SUM(tb.revenue) AS category_revenue
FROM temp_bestsellers tb
INNER JOIN products p ON tb.product_id = p.product_id
INNER JOIN categories c ON p.category_id = c.category_id
GROUP BY c.category_name;

Temporary Table Özellikleri

ÖzellikAçıklama
GörünürlükSadece oluşturan oturum görür
ÖmürOturum kapandığında otomatik silinir
İsimlendirmeAynı isimde kalıcı tablo olsa bile geçici tablo önceliklidir
IndexIndex eklenebilir (performans için önerilir)
StorageBellekte (MEMORY) veya diskte (InnoDB) saklanabilir

Ne Zaman Kullanılır?

-- 1. Karmaşık sorguyu adımlara bölme
CREATE TEMPORARY TABLE temp_active_customers AS
SELECT customer_id, SUM(total_amount) AS total
FROM orders WHERE status != 'cancelled'
GROUP BY customer_id HAVING total > 1000;

-- 2. Bu geçici tabloyu birden fazla sorguda kullan
SELECT * FROM temp_active_customers WHERE total > 50000;
SELECT AVG(total) FROM temp_active_customers;

-- 3. Temizle (opsiyonel — oturum kapanınca otomatik silinir)
DROP TEMPORARY TABLE IF EXISTS temp_active_customers;

Geçici Tablo vs Derived Table vs CTE

ÖzellikTemporary TableDerived TableCTE
ÖmürOturum boyuncaTek sorguTek sorgu
Birden fazla kullanım✅ (aynı sorguda)
Index
Explicit oluşturma

💡 İpucu: Ara sonucu tek sorguda kullanacaksan → derived table veya CTE. Birden fazla sorguda kullanacaksan veya index gerekiyorsa → temporary table.


Özet

  • TEMPORARY TABLE oturum bazlı geçici tablodur, oturum kapanınca silinir

  • Karmaşık sorguları adımlara bölmek ve ara sonuçları tutmak için ideal

  • Diğer oturumlar geçici tabloyu göremez

  • Index eklenebilir — büyük veri setlerinde performans artışı sağlar

  • Derived table ve CTE'den farkı: oturum boyunca yaşar ve birden fazla sorguda kullanılabilir