2010-09-13 3 views
1

У меня есть запрос на выборку, извлекающих запись на основе состоянияSelect Query Optimization

Select * from Employee where EmpStatus=#EmpStatus# 

EmpStatus в БД для каждого сотрудника будет либо 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? Вы запрашиваете всю таблицу или результат другого запроса? Есть ли в этом вопросе какие-либо другие столбцы, которые вы опускаете в этом примере? –

ответ

2

Вы могли бы изменить = к> =:

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

Самое главное для производительности, чтобы добавить соответствующий индекс.

+1

Хороший ответ. Еще одна важная вещь, которую я считаю важной, - это избегать «SELECT *». Может быть плохо выбрать все, если ваш код изменится, потому что ibatis не сможет сопоставить ваши новые поля, пока вы не получите одно и то же поле в объекте resultmap. Это может привести к ошибкам во время выполнения, которые трудно отследить («мой код не изменился, но программа теперь сработала!» После добавления столбца базы данных). – Killnine

+0

@ Killnine: Я полностью согласен. Я немного отредактировал свой ответ. –