Bu INSERT INTO table_a (a_id, a_name) VALUES (5, 'a5'),(6, 'a6');
gibi sql üretmek hazırda bekletme gerekir. Eğer 1 deyimi ile 2 satır ekleyebilir böyle SQL ileBir deyimde birden çok değer eklemek için SQL üretecek HQL nasıl yapılır?
. Ben birçok ilişki için bir set tasarruf zaman,
a_id, a_name
------------------
5 a5
6 a6
hazırda olsun birden insert deyimi ile ekleyecektir hazırda bekletme.
INSERT INTO scoring.table_a (`a_id`, `a_name`) VALUES (1, 'a');
INSERT INTO scoring.table_a (`a_id`, `a_name`) VALUES (2, 'a');
....
...
..
INSERT INTO scoring.table_a (`a_id`, `a_name`) VALUES (1000, 'a');
Ve geçen süredir:
Executed 1,000 queries; elapsed time (seconds) - Total: 0.78, SQL query: 0.78, Building output: 0
Ve aynı değerlerle test kullanımı Bu 1000 satır için 1 HQL ile tablo böyle bir şey sonuçlandı olacak eklerseniz neden olacaktır SQL INSERT INTO table_a (a_id, a_name) VALUES (5, 'a'),(6, 'a'),(),...,...,(1000, 'a');
böyle geçen süre sonuçlandı olacaktır:
Query 1 of 1, Rows read: 0, Elapsed time (seconds) - Total: 0.02, SQL query: 0.02, Building output: 0
benim testin sonucu 1000 değerine (0.02s) 1 beyanı daha hızlı yaklaşık 39 kez alınmayacak mı'dan 1000 ekleme ifadesi ile hibernate gibi 1 değerine (0.78s) sahiptir. Yani eklemek veya belki de güncelleştirmek için SQL gibi SQL üreten bir yöntem var. Yoksa bu, hazırda bulunan lehçeyi geçersiz kılmamız gereken anlamına mı geliyor? herhangi bir ipucu
olarak bildiğim kadarıyla, batch_size ayarı bellek sızıntısı kalmadan roundtrip aza indirmek için hafıza optimizasyon meselesidir. ** insert, bir işlemde ** hala birden fazla ifadedir **. bu yüzden batch_size buradaki çözüm değildir. Yine de teşekkürler .. – Angga
[Hazırda bekletme boyutu karışıklığı] (http://stackoverflow.com/questions/6687422/hibernate-batch-size-confusion) 'da belirtildiği gibi, "hibernate.jdbc.batch_size", JDBC2 API'sini kullanmanıza izin verir. birincil anahtar ** 'GenerationType.Identity' değilse çok ** ile bir ifadesine ** özdeş imza ile ** ardışık ** INSERT deyimleri ** (tablo ve sütun) birleştirir özelliği. –
evet ve ** ardışık INSERT ifadeleri **, ** tek INSERT ifadesi ** ile farklıdır. ve benim yorumumda daha önce de söylediğim gibi, ** bir işlemde eklenti hala birden fazla ifadedir **. – Angga