2010-09-13 5 views
1

J'ai requête de sélection qui chercher dossier basé sur une conditionSélectionnez Optimisation des requêtes

Select * from Employee where EmpStatus=#EmpStatus# 

Le EmpStatus dans le DB pour chaque employé aurait 0 ou 1.

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

Quand je passe EmpStatus comme 1, je devrais obtenir la liste contenant SEULEMENT 3 et 4. Mais si je passe EmpStatus comme 0, TOUS les 4 enregistrements devraient être récupérés. Comment cela peut-il être fait avec une seule requête de sélection optimale?

+0

Pour l'extraction de quatre lignes, il ne devrait pas y avoir de problème de performance. Je soupçonne que vous manquez quelques détails importants qui sont nécessaires à savoir pour optimiser la performance. Par exemple, combien y a-t-il de lignes, combien de lignes avec EmpStatus 0 et combien avec 1? Demandez-vous une table entière ou le résultat d'une autre requête? Y a-t-il d'autres colonnes impliquées dans votre requête que vous omettez dans cet exemple? –

Répondre

2

Vous pouvez changer = à> =:

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

La chose la plus importante pour la performance est d'ajouter un indice approprié.

+1

Bonne réponse. Une autre chose que je pense est important est d'éviter "SELECT *". Il peut être mauvais de tout sélectionner si votre code va changer car ibatis ne sera pas en mesure de mapper vos nouveaux champs jusqu'à ce que vous ayez le même champ dans votre objet resultmap. Cela peut provoquer des erreurs d'exécution difficiles à localiser ("mon code n'a pas changé mais le programme plante maintenant!" Après l'ajout d'une colonne de base de données). – Killnine

+0

@Killnine: Je suis totalement d'accord. J'ai édité ma réponse un peu. –