Birden fazla MySQL sorguları ve nasıl benim komut dosyası yapmak için daha hızlı gitmek

2 Cevap php

Bu bir (PEAR :: MDB2 kullanarak) PHP (1.900 saniye zaman sınırı ve daha 1GB bellek sınırı) ve MySQL kullanarak ...

Ben bir mysql veritabanında beslemeleri siteden veri yüklemek bir arama motoru oluşturmak için çalışıyorum. Bazı siteler onlara birçok bilgiye sahip oldukça büyük beslemeleri varsa (örneğin tek bir dosyada birden fazla 80.000 kayıtları). Kayıtların her biri için kontrol bazı veriler öncesinde veritabanı (aynı zamanda eklemek veya bir mysql tablosunu güncelleştirmek olabilir veri denetimi) de kayıt ekleme yapılır.

Benim sorunum sizin gibi birçok zaten anlaşılmış olabilir ... zaman! Yem her kayıt için 20'den fazla kontrol ve örneğin bir besleme vardır: 10.000 kayıtları> veritabanına 50.000 ekler olabilir.

Ben 2 yolları ile bu yapmaya çalıştım:

  1. Beslemesi okumak ve bir dizi veri depolamak ve daha sonra dizi döngü ve veri denetimi ve ekler yapmak. (Bu, tüm hızlı olmaktadır)
  2. Beslemesi okumak ve çizgi ile veri kontrol hattını yapmak ve takın.

Veritabanı sürekli sorgulanan her alanda dizinleri kullanır. PHP kodu hiçbir ekstra değişkenleri ile tweaked ve SQL sorguları basit select, update ve insert ifadelerdir edilir.

Saatin ayarlanması yüksek sınırlayan ve hafıza bir sorundur ne. Sorun, bu işlemi daha hızlı olmasını istiyor.

So my question is: How can i make the process of importing the feed's data faster? Are there any other tips that I might not be aware of?

2 Cevap

Kullanımı LOAD DATA INFILE genellikle bir yığın yük yapmak INSERT kullanarak daha çok kat daha hızlıdır.

Eğer PHP kodu sizin kontrolleri yapmak bir CSV dosyasına dökümü ve ardından LOAD DATA INFILE kullanmak zorunda bile, bu büyük bir kazançtır olabilir.

Ithalat bir zaman bir şey olduğunu ve bir tam dizin kullanıyorsanız, ithalat hızlandırmak için basit bir çimdik, dizini kaldırmak, tüm verileri alma ve ithalat yapılır kez tam dizini eklemektir. Bu çok daha hızlı, according to the docs:

For large data sets, it is much faster to load your data into a table that has no FULLTEXT index and then create the index after that, than to load data into a table that has an existing FULLTEXT index.