VERİ YÜKLEME INFILE ve genişletilmiş INSERT'lerin her birinin kendine özgü avantajları vardır.
LOAD DATA INFILE, tek tek işlemle masa verilerinin toplu yüklenmesi için, çanlar ve ıslıkların aşağıdaki gibi işlemleri yapması için tasarlanmıştır:
- İlk Satırları Atlama
- Belirli Sütunları Atlama
- Belirli Sütunları Dönüştürme
- Belirli Sütunları Yüklemek
- Yinelenen Anahtar Sorunlarını Yönetme
Ayrıştırma için daha az ek yük gerekli
Kapak tarafında, 1.000.000 satır yerine yalnızca 100 satır içe aktarıyorsanız, genişletilmiş INSERT duyarlıdır.
Mysqldump'ın, INSERT başına yüzlerce veya binlerce sıra enjeksiyonunu gerçekleştirdiği gibi verilerle birlikte tablo tasarımı taşımak için genişletilmiş INSERT'ler etrafında tasarlandığına dikkat edin. LOAD DATA INFILE, her zaman şema ve veri arasında fiziksel bir dikoterapi yaratır.
Uygulama açısından bakıldığında LOAD DATA INFILE, şema değişikliğine genişletilmiş INSERT'lerden daha duyarsızdır.
LOAD DATA INFILE'i kullanmanın iyisi, kötüsü ve çirkinliği ileri geri gidebilir. Hangi tekniği kullanırsanız kullanın, daima bulk_insert_buffer_size ayarını yapmalısınız . Niye ya?
Bulk_insert_buffer_size hakkındaki MySQL Belgesine göre:
MyISAM, INSERT ... SELECT, INSERT ... DEĞERLER (...), (...), ... ve LOAD DATA INFILE için toplu eklemeleri daha hızlı yapmak için ağaç benzeri özel bir önbellek kullanır tablolar. Bu değişken, önbellek ağacının boyutunu, iş parçacığı başına bayt olarak sınırlar. 0'a ayarlamak bu optimizasyonu devre dışı bırakır. Varsayılan değer 8 MB'dir.
Yıllar boyunca, müşterinin bunu ayarlamadığından ve 8 MB'a bıraktıktan sonra müşterisini gördüm. Daha sonra, LOAD DATA INFILE kullanmaya karar verir veya mysqldumps içeri aktarırlarsa, yanlış bir şey hissedebilirler. Genellikle bunu makul bir 256M'ye ayarlamanızı tavsiye ederim. Bazı durumlarda, 512M.
Yeterince büyük bir toplu INSERT tamponuna sahip olduğunuzda, her iki tekniği de kullanmak akademik hale gelir ve kişisel tercihinize göre azalır. İsteğe bağlı olarak yalnızca 100 satırlık INSERT topladığınız uygulamalar için uzatılmış INSERT'ler kullanın.
Dürüst olmak gerekirse, LOAD DATA INFILE deyimi, normal INSERT ifadelerinin bir tür yüklü ifade olduğundan daha hızlı olduğunu söyler; çünkü yapılandırma dikkate alınmaz. LOAD DATA INFILE ile uzatılmış INSERT'ler arasında uygun bir bulk_insert_buffer_size ile bir karşılaştırma yapsanız bile, her satır ayrıştırmada kaydedilen nanosaniyeler, yalnızca en iyi LOAD DATA INFILE lehine nominal sonuçlar verebilir.
Devam et ve bunu my.cnf dosyasına ekle
[mysqld]
bulk_inset_buffer_size=256M
Ayrıca genişletilmiş INSERT'leri başlatmadan önce sadece oturumunuz için ayarlayabilirsiniz.
SET bulk_insert_buffer_size= 1024 * 1024 * 256;
GÜNCELLEME 2012-07-19 14:58 EDT
İşleri perspektifte tutmak için toplu ekleme arabelleği InnoDB yerine yalnızca MyISAM tablolarını yüklemek için kullanışlıdır. Toplu yükleme hakkında daha yeni bir yazı yazdım InnoDB: Sabit diskte bekleyen sıkışmış dosyadan Mysql yükü
LOAD DATA INFILE
: MySQL ile yüksek hızlı uçlar . Alt satırda,LOAD DATA INFILE
genişletilmiş kesici uçları kullanma performansının% 65'ini elde edebilirsiniz . Modern donanım için 240.000 uç / saniye aldım.