ProgramlamaSQL/BI Analisti

Büyük SQL tablolarında benzersiz anahtar verileri garanti etmek için kopyaları arama ve işleme nasıl uygulanır?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

Tablolardaki kopya sorunları, SQL'in en eski problemlerinden biridir ve özellikle internet hizmetlerinin kitlesel büyümesi ve büyük veri göçleri ile daha da önem kazanmaktadır. Başlangıçta problem manuel olarak çözülüyordu: kopyaları belirli scriptlerle bulup siliyorlardı, ama verilerin büyümesiyle bu yaklaşım etkisiz hale geldi.

Problem: Dikkatsiz yükleme, göç veya hatalar sırasında, genellikle aynı anahtar özelliklere (örneğin, email veya kimlik) sahip on binlerce satır oluşmaktadır. Bu, entegrasyonlarda hatalara, yanlış analize ve müşteri güveninin kaybına yol açar.

Çözüm: Kopya raporlarını gruplama ve pencere fonksiyonları ile oluşturmak; bir "doğru" kaydı saklayarak kopya kayıtları silmek; anahtar alanlar için UNIQUE kısıtlamaları eklemek ve düzenli denetimler yapmak.

Örnek kod

WITH Duplicates AS ( SELECT email, COUNT(*) AS cnt FROM users GROUP BY email HAVING COUNT(*) > 1 ) SELECT u.* FROM users u JOIN Duplicates d ON u.email = d.email ORDER BY u.email, u.id;

Kopyaları silme (en düşük id'ye sahip satırı bırakmak):

DELETE FROM users WHERE id NOT IN ( SELECT MIN(id) FROM users GROUP BY email );

Anahtar özellikler:

  • Kopyaları bulmak için GROUP BY, HAVING kullanmak
  • NOT IN/EXISTS/ROW_NUMBER() üzerinden silmeyi otomatikleştirmek
  • Anahtar alanlar için benzersizlik kısıtlamaları getirmek

Kandırıcı Sorular.

Kopyaları tablo üzerinden silmek için DISTINCT kullanılabilir mi?

Hayır, DISTINCT yalnızca seçim (SELECT) için çalışır, tablo satırlarını silmez. Silmek için DELETE veya DISTINCT ile yeni bir temiz tablo oluşturmak için INSERT ... SELECT kullanmak gerekir.

DELETE ... WHERE id NOT IN (SELECT MIN(id) ...) komutu tüm kopyaları garantili olarak siler mi?

Hayır, eğer anahtar sütununda NULL varsa, bu sorgu NULL değer karşılaştırmalarının özellikleri nedeniyle hatalı bir şekilde kopyaları bırakabilir.

Artık kopya olmaması için UNIQUE INDEX oluşturmak yeterli mi?

Hayır, indeks yalnızca yeni kopya eklemeye karşı koruma sağlar, mevcut tablo tekrarlarını etkilemez.

Tipik Hatalar ve Anti-Örnekler

  • NULL veya karmaşık anahtarları göz önünde bulundurmadan bir sütun bazında doğrudan silme
  • Kopyaların sürekli izlenmesi ve kaydedilmemesi
  • Tabloyu önceden temizlemeden benzersizlik kısıtlamaları koymak — indeks oluşturma hatasıyla sonuçlanır

Hayattan Bir Örnek

Olumsuz Durum

CRM sistemi, email benzersizliğini dikkate almadan farklı kaynaklardan kullanıcıları kopyalar, veritabanında 50000 kopya vardır. Kütlevi UNIQUE indeks ekleme girişimi başarısız olur, servis durur.

Artıları:

  • Hızlı uygulama (indeksten önce)

Eksileri:

  • Veri kaybı, servis aksaklıkları, destek sorunları

Olumlu Durum

Mühendis, özel raporlar aracılığıyla kopyaları düzenli olarak analiz eder, veritabanını temizler, benzersiz indeksler oluşturur. Yeni veri göçü öncesinde doğrulama yapar.

Artıları:

  • Temiz anahtar verileri
  • Analizde hata minimizasyonu

Eksileri:

  • İzleme ayarları ve süreçlerin otomatikleştirilmesi gerektirir