2010-09-13 86 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