Mysql
 sql >> Datenbank >  >> RDS >> Mysql

PHP braucht 90-mal länger, um eine Abfrage auszuführen, als der MySQL-Client

Ein sehr verspätetes Update zu dieser Frage geben:

Ich habe die Ursache nicht gefunden, aber es stellt sich heraus, dass EXPLAIN in PHP anders war als in der CLI. Ich bin mir nicht sicher, ob ein Aspekt der Verbindung dazu führen würde, dass MySQL ein anderes Feld für den Index verwendet, da diese Dinge meines Wissens nicht zusammenhängen sollten. aber leider zeigte PHPs EXPLAIN, dass der richtige Index nicht verwendet wurde, während dies bei den CLIs der Fall war.

Die Lösung in diesem (verblüffenden) Fall ist die Verwendung von Indexhinweisen . Siehe die 'FROM'-Zeile in dieser modifizierten Abfrage aus meinem Beispiel:

SELECT HEX(al.uuid) hexUUID, al.created_on,
    IFNULL(al.state, 'ON') actionType, pp.publishers_id publisher_id,
    pp.products_id product_id, al.action_id, al.last_updated
FROM ActionAPI.actionLists al USE INDEX (created_on)
LEFT JOIN ActionAPI.publishers_products pp
    ON al.publisher_product_id = pp.id
WHERE (al.test IS NULL OR al.test = 0)
    AND (al.created_on >= :since OR al.last_updated >= :since)
ORDER BY created_on ASC
LIMIT :skip, 100;

Hoffe, das hilft jemandem!