J'utilise une requête UNION pour extraire des données de deux tables en fonction de la date. Requête ci-dessousOptimiser une requête mysql UNION
SELECT title, id, date as date_added
FROM test1 WHERE test1.id
UNION
SELECT title, customer as id, date_added
FROM test2 WHERE test2.id
ORDER BY date_added DESC LIMIT 0,8
J'ai un index sur la date et DATE_ADDED sur chaque table ... le problème est que la requête n'est pas optimisé et quand je l'utilise EXPLIQUER il montre toutes les lignes des deux tables sont sélectionnés pour me donner la sortie.
Existe-t-il une autre façon de faire cette requête afin qu'elle puisse être optimisée? La seule solution que je peux penser est d'exécuter les deux requêtes séparément avec LIMITS et de trier les données dans l'application, mais il semble qu'il serait impossible d'effectuer la pagination dans mon application avec cela.
Votre condition 'WHERE' semble un peu tronquée dans le but de limiter les lignes sélectionnées. Avez-vous omis quelque chose? –
Non, je n'ai pas. Même si je supprime la clause where, les requêtes sélectionnées sont toujours égales au nombre total de lignes dans chaque table. – user350230
Eh bien, ils le feraient, n'est-ce pas. Vous n'avez pas d'égalité ou d'autre terme pour limiter l'instruction WHERE, si ce n'est que " .id" doit contenir une valeur qui vaut true. Normalement, il aurait un terme limitant comme «colonne = valeur» ou «colonne» valeur »ou« colonne entre valeur1 et valeur2 », etc. –