2016-05-11 6 views
1

я столкнулся проблема производительности в указанных ниже 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 

Есть ли альтернатива (JOIN или любой другой вариант) отборной сазе так, что потребуется меньше времени для выполнить? Я называю этот запрос из кода Java

Любой вид помощи будет оценен

+1

Вместо Java вы должны иметь меченый РСУБД –

+0

вы используете как запрос на потенциально большой набор данных. Кроме того, я не понимаю, почему вы не можете просто использовать оператор «OR» для двух предложений типа файла. Я бы превратил эту колонку в нечто «определенное», чтобы вы могли использовать равные с оператором OR. Далеко быстрее –

+1

ВСТУПИЛИ! – jarlh

ответ

1

Вы можете написать это с явным 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).

+0

Этот ответ должен быть принят точно. –

0

Изменения 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 
Смежные вопросы