Mesele elimizdeki bir datayı batch olarak ekleme yapıyoruz burada query tercihimiz ne olmalı o anda birden cok işlem yapabilmelimi.

ör:

INSERT INTO tablo1(tablo2_id,alan2,alan3,alan4) SELECT t2.id, parametre2, parametre3, parametre4 FROM tablo2 t2 LEFT JOIN tablo1 t1 ON t2.id = tq.tablo2_id WHERE t1.id IS NULL AND t1.name = parametre5

Gibi mesela burada burada ilişkili bir tablomuz var. Burada biz ihtiyacımız olan id datasını insert anında tekrar bir SELECT yaparak karşılamış oluyoruz. Bu işlem batch yapılıyor dikkatinizi çekerim yani aynı anda 300 adet bu şekilde query çalışıyor.

Performans açısından acaba başka neler yapılabilir yani önceden id lerimi almak gerekir acaba yoksa bu yeterince iyimi. Böyle olduğu zamda ise de işlemci kullanımıda artıyor buda rahatsızlık verici ve bunu bir core,a yüklüyor.

İlgilendiğiniz için teşekkür ederim

soruldu: 02 May '13, 07:44

yaqmoz's gravatar image

yaqmoz
2074512
cevap kabul oranı: 4%

değiştirildi: 07 May '13, 03:23

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183

JDBC ile mi insert yapıyorsunuz yoksa Hibernate gibi bir orm kullanıyor musunuz?

(03 May '13, 07:05) dreampowder dreampowder's gravatar image

MySQL'in engine'lerini incelemen daha faydalı olur. Sonrasında, Java tarafında ise hız içinaraya bir ORM katmanı sokmadan bunu halledebilirsin. Parametrik Stored procedure'ler yazıp, onları çağırırsın.

(07 May '13, 05:10) Turgay Can Turgay%20Can's gravatar image

MySQL Kullanım kılavuzunda:

INSERT statements that use VALUES syntax can insert multiple rows. To do this, include multiple lists of column values, each enclosed within parentheses and separated by commas. Example:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

O halde önce 300 selectinizin tüm sonuçlarını birden getiren tek sorgu yapıp, tüm verileri hafızaya alıp sonra da değerleri virgüllerle ayırılmış dev bir insert oluşturup tek seferde veritabanına iteleyebilirsiniz.

Yok efendim 300 sorgu olmazsa olmaz derseniz sorgularınızı transaction içine alın veya jdbc multi query izni verin. Böylece tek seferde tüm insert ifadelerini aynı işlemde ya da aynı bağlantıda gönderebilirsiniz.

Mümkünse InnoDB/XtraDB ve MySQL 5.6+ ya da MariaDB kullanırsanız da tablonun tamamını kilitlemden daha hızlı veri girmek mümkün olabilir.

permanent link

cevaplandı: 03 May '13, 01:12

nurettin's gravatar image

nurettin
2.2k2441
cevap kabul oranı: 14%

değiştirildi: 03 May '13, 01:13

Sanırım eksik söyledim :) Yukarıda yazdığım sorguda da daha önce olup olmadığını kontrol ediyorum veritabanında yani aynı kayıt var ise ekleme diyebilirim. Yada foreign key için söylüyorum: referans alan tagbloda o ekleme operasyonu için kayıt varmı varsa eklede diyebiliyorum. Yani kısaca tek tek olmak zorunda

(03 May '13, 01:54) yaqmoz yaqmoz's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1,077
×144

Soruldu: 02 May '13, 07:44

Görüntüleme: 1,017 kez

Son güncelleme: 07 May '13, 05:10

powered by BitNami OSQA