Güncellemeleri MySQL binlerce yavaşlıyor

5 Cevap php

Ben 100, toplam 000 kez (yaklaşık 10, 000, her bir senaryo-run) için bir PHP döngü çalıştırmak için gereken ve her döngü buna yaklaşık 5 MySQL güncellemeler var. Ben döngü 50 kez çalıştırdığınızda, bu 3 sn sürer. Ben döngü 1000 kere çalıştırdığınızda, yaklaşık 1300 sn sürer. Gördüğünüz gibi, MySQL daha UPDATE'ler ile ALOT yavaşlıyor.

Bu bir örnektir güncelleme:

mysql_query("UPDATE table SET `row1`=`row1` +1 WHERE `UniqueValue`='5'");

Bu PHP rastgele oluşturulur, ama ben bir değişkende saklamak ve her n döngüler çalıştırabilirsiniz.

Tutarlı bir hızda MySQL ve PHP çalıştırmak (PHP? Gizli değişkenleri depoladığı), ya da yapmak öylesine senaryoyu bölmek yapmak ya da herhangi bir yolu var mı?

Not: Ben değil üretim için, bir geliştirme amaçları için bu çalıştırıyorum, yani sadece veri erişimini 1 bilgisayar olacak.

5 Cevap

Kullan prepared statements. Onların iki ana faydalarından biri, tekrarlanan sorgular daha verimli olmasıdır.

Bu gibi bir şey kullanarak daha hızlı yükler olmalıdır:

mysql_query("UPDATE table SET `row1`=`row1` + 1 WHERE `UniqueValue` IN (5, ... 10)");

Eğer tabii UniqueValue bir dizin var varsayarsak. Varsayılan ayarları ile 8MB sorguları oluşturabilirsiniz ancak 1MB şimdi fazlasıyla yeterli olmalıdır. Bu çok büyük bir sorgu olabilir ama much daha hızlı olacaktır.

Ayrıca geçici işler biraz daha hızlı çok yapmak gerektiğini, tamamen dizin güncelleştirmeleri devre dışı olabilir:

ALTER TABLE table DISABLE KEYS;
ALTER TABLE table ENABLE KEYS;

Auto_commit kapatın ve (InnoDB tabloları ile çalışıyorsanız) Yok kere sonra açıkça hareketi tamamlamak.

UniqueValue üzerinde dizin ekleme ve row1 ve diğer kullanılmayan indisler gelen dizini silmek.

Apart row1 ve UniqueValue alanları dizine gelen, aynı zamanda INTEGER gibi bir sayısal veri türü kullandığınızdan emin olun ve {[(1)] gelenler singlequotes kaldırmak } WHERE maddesinde.

mysql_query("UPDATE table SET `row1`=`row1` +1 WHERE `UniqueValue`=5");

Else MySQL bir performans maliyeti olan geri / String ileri masaj ve gerekir.