Mürit ve Müridelerim 1 ay ncesinden beri çzemediğim sorunu çzdüm belki birilerine yardımcı olur... Şyle bir sorunum vardı yaklaşık 60.000+ Datayı Veri tabanına işliyordum Insert/Update ve Database kitleniyordu haliyle. yaklaşık 45 Dakika boyunca Database'i kullanamıyordum. Bütün yolları denedim olmadı. Query Optimize edeyim dedim araştırmaya başladım... Normalde yazmış olduğum kod şu şekilde idi for Daha sonra anladım ki bunu yapmak saçma yani 3-5 sorgu için eyvalah da birden fazla olunca database kafayı yiyor.. Her neyse araştırırken Transaction ile karşılaştım... Transaction nedir? Normalde Transaction sadece tek türde işlem yapıyor . Fakat değişik kombinasyonlar kullanabilirsiniz.. Transaction'da yapılan Xx. xxx işlemden sadece 1 tanesi bile yanlış olduğunda bütün Veritabanı eski haline dner... Reel bir rnek verilecek olursa. Mesela bakkala gittiniz 2 Ekmek aldınız. Bakkalcı bey /hanım efendi size ekmeği uzattı sizde ona para vermeyi unuttunuz ve gittiniz. Bu durumda Bakkalın sahibi size ekmek satmış olmuyor. Siz bu ekmeği satmadığınız için Veritabanından stoğu azaltmak istemeyeceksiniz... Çünkü ürün satılmadı. Parası alınmadı. Kabaca şu şekilde gerçekleşiyor olay. Siz Insert into SatilanUrunler... diye Satılan ürünün logunu insert ettiniz. Update Stok... Stok dan düştünüz. Insert into KasaHareketleri... ? Burda siz insert etmediniz ve 1 kodunuz boşta kaldı? Bu durumda hiçbir işlem gerçekleşmeyecek ve sanki ekmek satılmamış gibi olacaktır. Ve Gelelim EN BÜYÜK VE GÜZEL ZELLİĞİNE. Transaction Sizin yaptığınız işlemleri bir yığın gibi bellekte biriktirir ve zamanla sizin Veritabanını yormadan yavaş yavaş Insert/Delete/Update eder.. Parçadan bütüne Bl fethet mantığı.. Benim kodum 45 DK da insert ederken Transaction ile 15 Dakikalara kadar azaldı.. Fakat bu benim için yetmedi.. https://www.jokecamp.com/blog/make-your-sqlite-bulk-inserts-very-fast-in-c/ Burdaki amcanın makalesinde 1 Milyon datayı 4 Saniyede insert ettiğini sylemiş Muhtemelen kullandığı cihaz hızlı.. Bu yntem de işime yaramadı araştırmalarıma devam ettim ve sonuç olarak IN - CASE yntemi ile update ettim sorgularımı.. Kaynak olarak -> http://stackoverflow.com/a/41084025/4949524 Yapmış olduğum 60.000 Insert Yaklaşık 15 Saniyede sonuç verdi. Buda bana şuanlık yeterli bir süre.. Kodum-> RunnTheQuery(" UPDATE Deneme SET AdSoyad="Deneme" Where ID IN (Select ID from DenemeIdleri where IsActive =1 Limit 1453 );" Mysql de DB MARİA Hatası alırsanız da Şu yolu deneyin. Ilk nce ID leri veritabanından çekin RunnTheQuery(" UPDATE Deneme SET AdSoyad="Deneme" Where ID IN (". implode .");" ve şu kodu çalıştırın işlem tamam :) Iyi Akşamlar. Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu nünden daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? yle ise, sakın yetime kahretme ! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!

Sadece merak ettiğim için soruyorum; Stored procedure denedin mi hocam? Ben bu durumlarda bütün veriyi db'ye atıp procedure'de parse edip insert ediyorum, tabi 60.000 satır veri için hiç denemedim.

C# ta kullanabilecegin sqlbulkcopy sinifida var aklinda bulunsun toplu veri kopyalamak icin.

myisam ın bildiğim transaction desteği yok innodb nin var. genelde kayıt sayısına gre değişmekle 1k, 10k yada kayıt sayısının %10 na ulaştığında commit etmek daha iyi bu tür işlemleri de stored procedure kullanarak yapmak hız kazandıracaktır sp e dışarıdan parametrleri vererek çalıştırabilirsin. yaptığın iş tablo yapısına gre değişmekle birlikte temp bir tabloya kayıtları senin istediğin sonucu insert edip buradan gerçek tablona kayıtları aktarabilirsin.

Hannibal_king, hocam Php kullanıyorum masteryoda && kuzetar, hocam Stored procedure daha yavaş onu da denedim en hızlısı bu Thread ile birden fazla db login bile yaptırdım. Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu nünden daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? yle ise, sakın yetime kahretme ! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!