Dave Blake wrote:
> I noticed my queries going very slowly after changing a join to a left
> join, examination of the query plan showed that the optimiser was choosing
> a poor plan.
It chooses a _correct_ plan.
> It only occurs when the left join is on a views, if explicit
> tables are used instead then the problem does not occur.
Your queries are quite different. (One less LEFT.)
This is the equivalent query with tables:
SELECT song.*, song_artist.*, artist.*
FROM song
LEFT JOIN (song_artist JOIN artist
ON song_artist.idArtist = artist.idArtist
) AS songartistview
ON song.idSong = songartistview.idSong
WHERE song.idSong =1;
It has exactly the same query plan as the query with the view.
> In trying to get the artist(s) for a song ...
A query to get the artist(s) for a song would look like this:
SELECT *
FROM artist
WHERE idArtist IN (SELECT idArtist
FROM song_artist
WHERE idSong = 1);
What is your query actually supposed to do?
Regards,
Clemens