2010-09-13 88 views
1

我有一个基于一个条件选择查询优化

Select * from Employee where EmpStatus=#EmpStatus# 

为每个员工EmpStatus在DB将0或1

EmpID EmpName EmpStatus 
*********************** 
1  Name1 0 
2  Name2 0 
3  Name4 1 
4  Name5 1 

当我通过EmpStatus为获取记录选择查询1,我应该得到仅包含3和4的列表。但是如果我将EmpStatus作为0传递,则应该获取所有4条记录。这怎么能通过一个最佳选择查询来完成?

+0

对于提取四行,不应该有性能问题。我怀疑你错过了一些必要的重要细节来优化性能。例如,有多少行,EmpStatus 0有多少行,1有多少行?您是在查询整个表格还是其他查询的结果?在这个例子中,您查询中是否还有其他列涉及到? – 2010-09-13 08:05:45

回答

2

你可以改变=为> =:

SELECT col1, col2 -- etc... 
FROM Employee 
WHERE EmpStatus >= #EmpStatus# 

性能,最重要的是增加一个适当的索引。

+1

很好的答案。我认为另一件重要的事情是避免使用“SELECT *”。 如果代码将要更改,那么选择所有内容可能会很糟糕,因为在resultmap对象中有相同的字段之前,ibatis将无法映射新的字段。这会导致难以追踪的运行时错误(在添加数据库列后“我的代码没有更改,但程序现在崩溃了!”)。 – Killnine 2012-03-19 16:22:11

+0

@Killnine:我完全同意。我编辑了我的答案了一下。 – 2012-03-19 18:04:00