MySQL içine toplu veri almak

0 Cevap php

Yani benim MySQL veritabanı içine bazı satış verileri almak için çalışıyorum. Veriler daha sonra veritabanına işlenen satış verileri kaydetmek, benim PHP uygulama ilk sürecine gereken bir ham CSV dosyası biçiminde aslen.

Başlangıçta ben inanılmaz verimsiz olduğunu fark bireysel INSERT sorguları yapıyordu (~ alarak 6000 sorguları neredeyse 2 minutes). Sonra tek bir büyük sorgu oluşturulur ve INSERT tek seferde veri ed. Bu bize verimliliğinde 3400% artış verdi ve sorgu süresi azalır sadece üzerinde 3 seconds.

Ama anladığım kadarıyla, LOAD DATA INFILE INSERT sorgunun herhangi bir tür daha hızlı olması gerekiyordu. Yani şimdi ben bir metin dosyasına işlenmiş veri yazma ve LOAD DATA INFILE veritabanına almak için kullanıyorum düşünüyorum. Bu bir veritabanına büyük miktarda veri eklemek için en uygun yolu nedir? Yoksa bu konuda tamamen yanlış şekilde gidiyorum?

Ben çoğunlukla sayısal veriler, bir kaç bin satır şeylerin büyük düzeni çok değil biliyorum, ama ben mümkün olduğunca duyarlı / Bu intranet uygulaması gibi hızlı yapmaya çalışıyorum. Ve ben de bu süreci biz diğer şirketlere programın lisans için karar durumunda ölçekler kadar emin olmak istiyorum.

UPDATE:

Bu yüzden devam edin ve test LOAD DATA INFILE dışarı önerdiği gibi, (ben iki defa şimdi diske aynı veri yazma beri) bana sadece marjinal hızı artar verebilir düşünerek, ancak sorgu kesti şaşırdım vermedi aşağı ~ 240ms için 3300ms yerinden zamanı. Sayfa yine toplam yürütmek için yaklaşık ~ 1500ms alır, ama yine de eskisinden daha belirgin iyidir.

Buradan itibaren ben veritabanındaki herhangi bir gereksiz dizin olup olmadığını görmek için kontrol edeceğiz ve benim tablolar tüm ama iki InnoDB olduğundan, ben genel performansını optimize etmek InnoDB ara bellek havuzuna optimize bakacağız sanırım.

0 Cevap