Comment puis-je obtenir une requête qui utilise un OU dans la clause WHERE pour se scinder en deux requêtes avec UNION lors de la compilation? Si je le réécris manuellement, la requête utilisant l'UNION est 100 fois plus rapide que la requête unique, car elle peut utiliser efficacement différents index dans chaque requête de l'union. Y a-t-il un moyen pour que l'optimiseur utilise cette approche?Forcer UNION sur un OU pour l'optimisation dans SQL Server 2000
J'ai une requête qui ressemble à ceci:
select columnlist
from table1
join table2 on joincond2
join table3 on joincond3
where conditions1
and ((@param1 is null and cond3a) or (cond3b))
Où COLUMNLIST, joincond2, joincond3 et conditions1 sont toutes les expressions plus longues. Le kicker est que seule une des conditions dans la RO est toujours vraie. J'ai d'abord pensé que je pouvais simplement le réécrire pour faire l'union, mais ensuite je répète columnlist, joincond2, joincond3, et conditions1, qui est une vingtaine de lignes de SQL qui pourraient nécessiter beaucoup de maintenance dans le futur. Y at-il un indice que je peux fournir ou une meilleure façon d'écrire la clause WHERE? Merci d'avance.
Est-ce que cond3a ou cond3b se rapportent à l'une des conditions de jointure? –