Производительность SQL запросов - PullRequest
0 голосов
/ 10 января 2019

Какой из этих SQL-запросов будет работать лучше? Предположим, что дают одинаковые результаты:

SELECT mov_title, mov_year, mov_dt_rel, act_fname, act_lname, dir_fname, dir_lname
FROM movie 
JOIN movie_cast 
ON movie.mov_id = movie_cast.mov_id
JOIN actor
ON actor.act_id = movie_cast.act_id
JOIN movie_direction
ON movie.mov_id = movie_direction.mov_id
JOIN director
ON director.dir_id = movie_direction.dir_id
WHERE movie.mov_id IN (SELECT mov_id 
FROM rating WHERE rev_id IN (SELECT rev_id
FROM reviewer
WHERE rev_name IS NULL));

SELECT mov_title, mov_year, mov_dt_rel, dir_fname, dir_lname, 
       act_fname, act_lname
       FROM movie a, movie_direction b, director c, 
                rating d, reviewer e, actor f, movie_cast g
       WHERE a.mov_id=b.mov_id
AND  b.dir_id=c.dir_id 
 AND a.mov_id=d.mov_id 
  AND  d.rev_id=e.rev_id 
   AND  a.mov_id=g.mov_id 
    AND g.act_id=f.act_id 
     AND e.rev_name IS NULL;

В общем, каковы соображения производительности запроса, кроме количества возвращаемых строк.

1 Ответ

0 голосов
/ 10 января 2019

IN (SELECT ...) может быть убийцей производительности. обычно лучше избегать этой конструкции.

Первая формулировка (с "JOIN..ON") - это "правильный" способ сделать SQL в этом веке. Второй («запятая») старомоден; не используйте это. (Это не разница производительности , просто разница в стиле.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...