"Select case" 性能问题

"Select case" performance issue

我在下面提到的 SQL 查询中遇到性能问题:

select column1, 
   (SELECT CASE fl.ISDELETED WHEN 'T' THEN 'T' ELSE 'F' END  FROM FILE fl
     WHERE lower(fl.FILE_TYPE) LIKE 'doc' AND fl.FILE_ID=doc.FILE_ID   ) AS alias1 ,
   (SELECT CASE fl.ISDELETED  WHEN 'T'  THEN 'T' ELSE 'F'  END FROM FILE fl
     WHERE lower(fl.FILE_TYPE) LIKE 'xls'   AND fl.FILE_ID=doc.FILE_ID ) AS alias2

FROM DOC doc

select case 语句是否有任何替代方案(JOIN 或任何其他选项)以便执行时间更短?我从 java 代码

调用此查询

如有任何帮助,我们将不胜感激

你可以用显式写join:

select d.column1,
       (case when f.isdeleted = 'T' and lower(f.file_type) = 'doc' then 'T'
             when lower(f.file_type) = 'doc' then 'F'
        end) as alias1,
       (case when f.isdeleted = 'T' and lower(f.file_type) = 'xls' then 'T'
             when lower(f.file_type) = 'doc' then 'F'
        end) as alias2             
from doc d left join
     file f
     on f.file_id = d.file_id;

为了性能,您需要 file(file_id, file_type, isdeleted) 上的索引。

将您的 FILE_TYPE 更改为确定的东西,而不是像将其作为一次性更新全部迁移为小写,这样您就不必进行转换等

删除子选择,只使用常规 SQL

SELECT column1,
       f1.FILE_TYPE,
       CASE fl.ISDELETED WHEN 'T' THEN 'T' ELSE 'F' END  
FROM 
       FILE fl
WHERE 
       (fl.FILE_TYPE = 'doc' OR fl.FILE_TYPE = 'xls') AND 
       fl.FILE_ID=doc.FILE_ID