"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
我在下面提到的 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