Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

PHP leva 90x mais tempo para executar a consulta do que o cliente MySQL


Dando uma atualização muito tardia sobre esta questão:

Eu não encontrei a causa, mas acontece que o EXPLAIN era diferente no PHP versus no CLI. Não tenho certeza se algum aspecto da conexão faria com que o MySQL escolhesse usar um campo diferente para o índice, porque até onde sei essas coisas não devem estar relacionadas; mas, infelizmente, o EXPLAIN do PHP mostrou que o índice adequado não estava sendo usado, enquanto o CLI estava.

A solução neste caso (desconcertante) é usar index hinting . Veja a linha 'FROM' nesta consulta modificada do meu exemplo:
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;

Espero que isso ajude alguém!