0
votes

Besoin d'autres moyens d'écrire une requête sélectionnée

J'essaie de trouver un moyen qui aidera à récupérer des enregistrements en fonction d'une condition.

DECLARE @fetchTestDotComStudents BIT = 1

-- Now if @fetchTestDotComStudents is 1 then fetch only @test.com students else fetch all students.
-- Below is the query I used

IF(@fetchTestDotComStudents = 1)
BEGIN
    SELECT * FROM Student
    WHERE Email LIKE '%@test.com'
END
ELSE IF(@fetchTestDotComStudents = 0)
BEGIN
    SELECT * FROM Student
END


5 commentaires

Je ne suis pas tout à fait sûr de ce que vous demandez, mais ce qui précède semble être la bonne méthode de ce que vous avez. Un cas sera plus bas la performance et la logique booléenne appropriée entraînerait un plan de requête médiocre pour le scénario Autre . Basé sur la simplicité, si ... sinon semble que la bonne chose à faire.


Merci @larnu


@Larnu - Avez-vous une référence à sauvegarder ce que vous dites? Toute version récente de SQL Server sera certainement en mesure d'optimiser un plan avec une seule variable ....


Merci à tous pour la solution.


@Milney Que diriez-vous #backtobasics: un exemple de "lavabo de cuisine" mis à jour et CATCH-TOUTES LES QUIES ?


3 Réponses :


1
votes

Utilisez simplement un ou:

SELECT * FROM Student
WHERE Email LIKE '%@test.com' OR @fetchTestDotComStudents = 0


1 commentaires

Comme je le mentionne dans les commentaires sur la réponse, cela pourrait bien se retrouver avec un plan de requête mal mis en cache. Si @FetTetStestDotCommectstudents a une valeur autre que 1, SQL Server mettra en cache le plan pour ce qui est probablement un petit ensemble de données. Lorsqu'une requête pour @fettStestDotCommectstudents = 0 est ensuite exécutée, le plan mis en cache sera utilisé et probablement les estimations seront très fausses. La simplicité peut signifier qu'il "n'est pas" un problème, mais avec d'autres requêtes, cela peut causer des problèmes de performance réels; Et pourquoi j'ai recommandé que l'OP est probablement meilleur avec si ... sinon .



0
votes

Vous pouvez faire comme xxx


0 commentaires

0
votes

Si cette table est grande et que vous cherchez fréquemment de cette manière, vous voudrez peut-être envisager d'ajouter une colonne supplémentaire. La clause similaire avec un% de premier plan nécessite une numérisation d'index regroupée de la table entière. Vous pouvez mettre un index non plané sur Istest qui accélérera considérablement votre requête. Si votre table est petite, cela est probablement surchargé. xxx


0 commentaires