Bonjour à tous,
J'ai un petit soucis à cause d'une base de données à la conception plutôt moyenne - dont je n'ai pas en charge l'architecture -, je dois réaliser le front office qui se retrouve particulièrement lent. J'essaie d'optimiser au mieux mes scripts alors je viens vers vous.
Une des partie les plus lentes concerne des données sur deux tables complètement différentes mais dont les résultats doivent être mélangés, je passe donc par un UNION.
Par exemple, pour un COUNT j'ai ceci :
Déjà la c'est assez "fouilli" mais les tables sont totalement différentes, donc pas d'autre choix que de passer par un UNION et une table temporaire à ma connaissance.
Pour l'affichage des données, c'est pire, même avec une limite à 24 résultats :
Avez-vous une petite idée de comment améliorer les performances ? Le cache MySQL est activé. J'ai entendu dire que UNION ALL était beaucoup beaucoup plus rapide, pourtant lorsque je fais "UNION ALL" au lieu de "UNION", je n'ai pas vraiment de résultats probants mais peut-être que je l'utilise mal.
Merci beaucoup d'avance
J'ai un petit soucis à cause d'une base de données à la conception plutôt moyenne - dont je n'ai pas en charge l'architecture -, je dois réaliser le front office qui se retrouve particulièrement lent. J'essaie d'optimiser au mieux mes scripts alors je viens vers vous.
Une des partie les plus lentes concerne des données sur deux tables complètement différentes mais dont les résultats doivent être mélangés, je passe donc par un UNION.
Par exemple, pour un COUNT j'ai ceci :
SELECT SUM(count) AS count FROM
((
SELECT
COUNT(DISTINCT T1.id_champ) AS count
FROM
table1 T1 INNER JOIN ... - 4 INNER JOIN -
WHERE
- UNE DIZAINE DE WHERE SUR 5 TABLES -
)
UNION
(
SELECT
COUNT(DISTINCT T1.id_champ) AS count
FROM
table2 T1 INNER JOIN ... - 5 INNER JOIN -
WHERE
- UNE DIZAINE DE WHERE SUR 6 TABLES -
))
temp
Déjà la c'est assez "fouilli" mais les tables sont totalement différentes, donc pas d'autre choix que de passer par un UNION et une table temporaire à ma connaissance.
Pour l'affichage des données, c'est pire, même avec une limite à 24 résultats :
(
SELECT
PLEIN DE CHAMPS SELECTIONNE ...
FROM
table1 T1 INNER JOIN ... - 4 INNER JOIN -
WHERE
- UNE QUIZAINE DE WHERE SUR 5 TABLES -
ORDER BY champs ASC
LIMIT 0, 24
)
UNION
(
SELECT
PLEIN DE CHAMPS SELECTIONNE ...
FROM
table2 T1 INNER JOIN ... - 5 INNER JOIN -
WHERE
- UNE QUIZAINE DE WHERE SUR 5 TABLES -
ORDER BY champs ASC
LIMIT 0, 24
)
ORDER BY champs ASC
LIMIT 0, 24
Avez-vous une petite idée de comment améliorer les performances ? Le cache MySQL est activé. J'ai entendu dire que UNION ALL était beaucoup beaucoup plus rapide, pourtant lorsque je fais "UNION ALL" au lieu de "UNION", je n'ai pas vraiment de résultats probants mais peut-être que je l'utilise mal.
Merci beaucoup d'avance
