Partitioning Neden Gerekli? Milyon Satırı Hızlı Sorgulamak İçin Tablo Bölümü
# Partitioning Neden Gerekli? Milyon Satırı Hızlı Sorgulamak İçin Tablo Bölümü
Bir e-ticaret sitesinde 10 milyon satırlık sipariş tablosu var. Müşteri, sadece bu ayın siparişlerini sorguluyor. Ama veritabanı tüm 10 milyon satırı tarayıp filtreliyor. Sonuç? Sorgu 30 saniye sürüyor.
Partitioning (tablo bölümü) bu sorunu çözer. Tabloyu tarihe göre parçalara bölersin. Ocak siparişleri ayrı, Şubat siparişleri ayrı. Sorgu sadece ilgili parçayı okur.
Bir tabloyu belirli bir sütuna göre mantıksal parçalara bölmektir. Her parça ayrı depolanır ama sorgudan kullanıcı bunu görmez.
Avantajları:
- Sorgu hızı: Sadece gerekli parça taranır
- Bakım kolaylığı: Eski veriler silinirken yeni veriler etkilenmez
- İndeks performansı: Parçanın kendi indeksi olur
Siparişleri tarihe göre bölüyoruz. Her ay ayrı partition.
1CREATE TABLE siparisler (2siparis_id INT,3musteri_id INT,4tutar DECIMAL(10,2),5tarih DATE6)7PARTITION BY RANGE (YEAR(tarih)) (8PARTITION p2023 VALUES LESS THAN (2024),9PARTITION p2024 VALUES LESS THAN (2025),10PARTITION p2025 VALUES LESS THAN (2026)11);Şimdi veri ekleyelim:
1INSERT INTO siparisler VALUES2(1, 101, 150.00, '2023-06-15'),3(2, 102, 200.00, '2024-01-10'),4(3, 103, 175.50, '2024-12-20'),5(4, 104, 300.00, '2025-02-05');2024 siparişlerini sorgula:
1SELECT * FROM siparisler WHERE tarih BETWEEN '2024-01-01' AND '2024-12-31';Çıktı:
1siparis_id | musteri_id | tutar | tarih22 | 102 | 200.00 | 2024-01-1033 | 103 | 175.50 | 2024-12-20Veritabanı sadece p2024 partitionını okudu. Diğerlerini görmedi.
2023 siparişlerini sil:
[cod]
ALTER TABLE siparisler DROP PARTITION p2023;
[/kod]
10 milyon satırı silmek yerine tüm partition silinir. Saniyeler sürer.
- Tarih bazlı veriler (log, sipariş, işlem)
- 1 milyondan fazla satır
- Eski verileri düzenli siliyorsun
- Belirli dönemleri sık sorguluyorsun
Partitioning, büyük tabloları yönetilebilir hale getirir.
0 yorum