2012-04-09 22 views
6

ResultSetExtractor içinde getInt çağrısı ile ilgili bir performans sorunum var. GetInt 20000 kez denir. Bir arama maliyeti 0.15 ms, toplam maliyet 24 saniye, profiler içinde çalışırken. SQL deyimlerinin yürütülmesi yaklaşık 8 saniye sürer (Birincil Anahtar üzerinden erişim). Ben mysql sürücü sürümü 5.1.13, mysql sunucu 5.1.44 ve spring-jdbc-3.1.1 kullanıyorum Performansı geliştirmek için bir fikriniz var mı?ResultSetExtractor içinde getInt ile ilgili performans sorunu

mut.getMutEffect()[0]=(rs.getInt("leffect_a") != 0); 
    mut.getMutEffect()[1]=(rs.getInt("leffect_c") != 0); 
    ... 
    mut.getMutEffect()[19]=(rs.getInt("leffect_y") != 0); 
    mut.getMutReliability()[0]=rs.getInt("lreliability_a"); 
    ... 
    mut.getMutReliability()[19]=rs.getInt("lreliability_y"); 

Benim düzeni bu

CREATE TABLE mutation (
... 
leffect_a BIT NOT NULL, 
lreliability_a TINYINT UNSIGNED NOT NULL, 
... 
leffect_y BIT NOT NULL, 
lreliability_y TINYINT UNSIGNED NOT NULL, 
... 
) ENGINE=MyISAM; 

Edit gibi görünür: GETINT içinde pahalı gibi görünüyor getIntWithOverflowCheck denir Methode. Bu kontrolleri yapmak mümkün mü?

cevap

2

İşte bazı öneriler:

  • Seti oldukça büyük sayıda boyutunu getirme: Statement.setFetchSize(). Bu, sonuç kümesini işlerken veritabanı sunucusuna gidiş-dönüşleri azaltmalıdır.

  • select ifadesi sağlayın örneğin

  • Genel tablo optimizasyonu profilleme ile en uygunudur Doğru veri türleri kullanıyor musunuz? Leffect_a dosyasını bir BOOLEAN

  • olarak değiştirebileceğiniz anlaşılıyor. SELECT ifadenizde gereksiz sütunları döndürmediğinizden emin olun.

  • Kullanım PreparedStatement

  • kaydırılabilir ve güncellenebilir resultsets kaçının cevap

+0

Statement.setFetchSize() iyi çalıştı. Çok teşekkürler. –

0

iki öneri:

  1. Mağaza defalarca kullanıldığı gibi yerel değişkenlerde getMutEffect() ve getMutReliability() sonucu. Hotspot jit, satır içi satırları çoğaltabilir ve kaldırabilir ama bence buna güvenmemek daha nettir.
  2. ResultSet'in değerlerini, sütun adları yerine kendi indizlerini kullanarak almak daha hızlı olabilir. Hatta bazı jdbc sürücüleri için endekslemek için yerel bir isimler haritası bile oluşturabilirsiniz, bu ResultSet'in haritalamayı yapmasına izin vermekten daha hızlıdır.
+0

Teşekkürler (ne varsayılan vardır). Profil oluşturucu, sütun adını dizine eşlemek için ucuz olduğunu gösteriyor. Ayrıca getMutEffect'e erişme konusunda bir performans sorunu yoktur. –

İlgili konular