sql >> Databáze >  >> RDS >> Mysql

Optimalizace MYSQL LEFT JOIN s CASE

Použití příkazu case nezrychlí dotaz ve vašem případě, ale protože jste o to požádali, níže je, jak by to vypadalo.

SELECT a.folderid, a.foldername, a.contenttype, 
    (CASE a.contenttype
        WHEN 'file' THEN b.descriptor
        WHEN 'link' THEN c.descriptor
        WHEN 'extfile' THEN d.descriptor
        WHEN 'video' THEN e.descriptor
        ELSE f.descriptor
    END CASE) AS descriptor
FROM t_folders a
LEFT JOIN t_files b ON a.contenttype = 'file' AND a.contentid = b.fileid
LEFT JOIN t_links c ON a.contenttype = 'link' AND a.contentid = c.linkid
LEFT JOIN t_extfiles d ON a.contenttype = 'extfile' AND a.contentid = d.extfileid
LEFT JOIN t_videos e ON a.contenttype = 'video' AND a.contentid = e.videoid
LEFT JOIN t_exams f ON a.contenttype = 'exam' AND a.contentid = f.examid
WHERE a.folderid = $folderId
ORDER BY a.folderid DESC

Pokud má každá z tabulek t_files, t_links, atd. pole folder_id, zkusil bych také udělat UNION na těchto tabulkách a pak výsledek spojit doleva s t_folders, abych získal folderid a foldername.



  1. Co je DATALENGTH() v SQL Server?

  2. Funkce zálohování PDO MySQL

  3. Paměťově efektivní způsob čtení dat BLOB v C#/SQL 2005

  4. Další bílá kniha 12c Optimizer