J'ai une vue contenant un UNION ALL. Par exemple:MySQL View contenant UNION n'optimise pas bien ... En d'autres termes, SLOW!
CRATE VIEW myView as
(SELECT col1, col2, col3
FROM tab1)
UNION ALL
(SELECT col1, col2, col3
FROM tab2)
Il s'agit de grandes tables contenant chacune 10 millions de lignes. Si je vous écris:
SELECT *
FROM myView
LIMIT 1;
au lieu d'être immédiat, il revient essentiellement jamais comme d'autres requêtes écrites contre ce point de vue. Si j'utilise la LIMITE dans une requête sur les tables sous-jacentes individuelles, elle est immédiate. J'ai des index sur les tables sous-jacentes. Il semble que MySQL crée l'ensemble de données agrégées (requêtes dans la vue) pour la vue avant d'appliquer des critères de filtrage. C'est insensé. Est-ce la façon dont MySQL optimise les requêtes par rapport aux vues? En passant, je ne peux même pas exécuter un plan d'explication contre la vue parce qu'elle ne revient jamais.