Büyük boyutta veri kayıt etmeye çalışıyorum. İki yöntem buldum bulk insert ve single insert .
Bazı kaynaklar bulk bazıları ise single insert hızlıdır diyor.
Single insert sırasında hint kullan diyen var, kullanmayın diyen de;
log tablosu kullanmak istedim db yetkilerinden dolayı oluşturamadım ve test edemedim şu kısmı:
SQL> insert /*+ APPEND */ 2 into test_table 3 select * 4 from test_table_deneme 5 log errors 6 reject limit unlimited 7 /
LOG ERRORS INTO err$_dest ('INSERT') REJECT LIMIT UNLIMITED;
Bulk olarak ,BULK COLLECT, FORALL ve SAVE EXCEPTIONS kullanımına göre daha hızlını testpit eden bir sayfa var.
Ben single insert (hintli) ve bulk insert denediğimde bulk’In daha hızlı olduğunu gördüm. Sizce hangi yöntemi izlemeli, alternatif bir yöntem var mı bildiğiniz?
https://www.rittmanmead.com/blog/2005/12/performance-issues-with-dml-error-logging-and-conventional-path-inserts/
Not: Buradaki tablolar bende viewla. viewlar oluşturarak gerekli tabloları join yapıyor,sonra da oluşan view select’inin sonucunu asıl tabloma kayıt atmaya çalışıyorum.
Bulk ve single aslında kelimelerinden yola çıkarsan yaptığın işleme göre seçmen gereken yöntemler.
Eğer bir kaynaktan aldığın bütün kayıtları bir hedefe yazıyorsan bulk işlem daha hızlı olacaktır. Ama tek tek kayıtlar üzerinde bir koşul çalıştırma durumunu da kaçırmış olabilirsin.
Eğer kayıtları tek tek ekleyeceksen eklemeden önce kayıtlar üzerinde işlem yapabilmen de olası. Ama muhtemelen daha yavaş olacaktır.
/+append / hintine gelince; bu hint single insert ile beraber veri dosyasına (datafile) yer optimizasyonu yapmadan dosyanın en sonuna eklemesi için kullanılan bir yöntem. Hızlı olduğu kesin ama daha fazla fiziksel alan kullanmana yol açacaktır. Sıfırdan ekliyorsan bir sorun olmayabilir ama çalışan bir sistem üzerinde tercih edilmeyebilir. Duruma bağlı.