Neden MySQL PHP ile PDO kullanarak hazırlanan sorgu belirli türleri yavaş edilir?

0 Cevap php

() / (Yürütme) hazırlamak ile PDO kullanarak fazla 10000 tuşları ile SELECT * FROM table WHERE Id IN ( .. ) sorgular kullanırken, performans hazırlanmış deyimleri kullanmadan hazırlanan tablolarda veya PDO ile mysqli kullanarak aynı sorguyu yaparken daha ~ 10X daha fazla düşürür.

Daha garip ayrıntıları:

  • WHERE Id IN( ..) madde yok Daha tipik SELECT ifadeleri bile 100K + satır ile ince gerçekleştirin. SELECT * FROM table WHERE Id, örneğin hızlı.

  • O PDOStatement::fetch() tamamen bulunuyor veya PDOStatement::fetchAll() - performans düşüşü sonrası () /) tamamlandı (yürütmek hazırlamak oluşur. MySQL sorgu yürütme zamanı her durumda küçük - bu MySQL optimizasyonu bir durum değildir.

  • 1K tuşları ile 10 sorguları içine 10K sorgu Yarma performanslısı.

  • Hazırlanan tablolar olmadan mysql, hazırlanan tablolar ile mysqli veya PDO kullanarak performanslısı.

  • Diğerleri ~ 0.5s alırken PDO w / hazırlanan aşağıdaki örnek üzerinde ~ 6 saniye sürer.

  • Bu doğrusal olmayan bir moda sahip anahtar daha kötüleşir. 100K tuşlarını deneyin.

Örnek kod:

// $imageIds is an array with 10K keys
$keyCount = count($imageIds);
$keys = implode(', ', array_fill(0, $keyCount, '?'));
$query = "SELECT * FROM images WHERE ImageID IN ({$keys})";
$stmt = $dbh->prepare($query);
$stmt->execute($imageIds);
// until now, it's been fast.  fetch() is the slow part
while ($row = $stmt->fetch()) {
    $rows[] = $row;
}

0 Cevap