() / (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 veyaPDOStatement::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;
}