这是我的查询
select case t.type
when 'N' then (select count(*) from table10_other)
when 'L' then (select count(*) from table11_other)
when 'P' then (select count(*) from table12_other)
end as nlp, t.*
from table t
left outer join employee e on e.emp_id = t.emp_id
left outer join table2 t2 on t2.code= t.code and d.year = t.year
order by e.name
包括ORDER BY部分会大大减慢我的查询速度。
答案 0 :(得分:0)
如果没有order_by_clause,则不保证多次执行的同一查询将以相同的顺序检索行。
当与子查询或聚合查询一起使用时,orderby
也可能具有性能。以某种排序顺序从数据库中检索数据的唯一方法是在查询中包含ORDER BY。 ORDER BY
没有替代品。但是你可以通过使用连接来避免子查询,它们会给你一些性能提升和期望。
此外,如果不需要排序顺序,您最终可以使用group by。它还可以提高性能,但每次都可以获得不同的名称顺序。
答案 1 :(得分:0)
我认为你犯了一个错误,因为select count(*) from table
总会给你相同的答案。我的建议是你需要像
select count(*) over (partition by t.type) as nlp
, t.*
from table t
left outer join employee e on e.emp_id = t.emp_id
left outer join table2 t2 on t2.code= t.code and d.year = t.year
order by e.name
或者如果你想只计算N L P
select case when t.type IN ('N','L','P') THEN
count(*) over (partition by t.type)
END as nlp
, t.*
from table t
left outer join employee e on e.emp_id = t.emp_id
left outer join table2 t2 on t2.code= t.code and d.year = t.year
order by e.name