我有两个查询来获取相同的数据,它们或多或少具有相同的执行时间。
SELECT name AS prog_name,d.chap_name,d.vid_name,d.idvideo FROM program
JOIN (SELECT name AS chap_name,chapter.idprogram, c.vid_name,c.idvideo FROM chapter
JOIN (SELECT a.name AS vid_name, a.idvideo, b.idchapter FROM video a
JOIN (SELECT idvideo,idchapter,x.idchaptervideo FROM chaptervideo
JOIN (SELECT idchaptervideo FROM prescriptionvideo WHERE idprescription=50)x
ON x.idchaptervideo=chaptervideo.idchaptervideo) b
ON b.idvideo=a.idvideo)c
ON c.idchapter=chapter.idchapter) d
ON d.idprogram=program.idprogram
SELECT program.name AS prog_name,chapter.name as chap_name,video.name as vid_name,video.idvideo FROM prescriptionvideo
JOIN chaptervideo ON prescriptionvideo.idchaptervideo=chaptervideo.idchaptervideo
JOIN video on chaptervideo.idvideo=video.idvideo
JOIN chapter on chaptervideo.idchapter=chapter.idchapter
JOIN program on chapter.idprogram=program.idprogram
where idprescription=50
有人可以指导我哪一个更好。我在前者加入之前和加入后者之后使用过滤。 MySQL解释显示前者与后者相比更多行扫描。
答案 0 :(得分:1)
MySQL的解释显示前者中的行扫描比较多 后者。
嗯,你有它!除了一个小细节。将过滤条件放在join语句中可以返回与在where子句中放置相同条件不同的结果。您的两个SQL查询不完全相同,即使它们返回相同的结果集。
SELECT program.name AS prog_name,chapter.name as chap_name,video.name as vid_name,video.idvideo FROM prescriptionvideo
JOIN chaptervideo ON prescriptionvideo.idchaptervideo=chaptervideo.idchaptervideo
JOIN video on chaptervideo.idvideo=video.idvideo
JOIN chapter on chaptervideo.idchapter=chapter.idchapter and chapter.idprescription=50
JOIN program on chapter.idprogram=program.idprogram
答案 1 :(得分:0)
第一个更好,因为它易于读写,并具有较低的行扫描值,否则查询具有相同的结果集。