Le site where
opère sur les colonnes brutes de l'ensemble de données. Le site select
au même niveau opère sur la même chose, et peut éventuellement donner des alias pour les couches de code extérieures. Mais surtout, les alias "enveloppent" le niveau actuel et ne sont pas disponibles à ce niveau - en particulier, vous ne pouvez pas utiliser les alias dans la clause where.
Vous pourrait ont fait quelque chose comme ça :
SELECT *
FROM
(SELECT exhibitor_participation+0 AS exhibitor_participation_value
FROM `exhibitor_registry`)
WHERE ((exhibitor_participation_value & 1) = 1)
et l'alias peut être utilisé dans la clause where, puisqu'il s'agit maintenant du nom d'une des colonnes sélectionnées à ce niveau. Pousser la sélection vers le bas dans une vue interne mai limiter la capacité de la base de données à proposer un plan de requête approprié (qui, comme d'habitude, dépendra de nombreux facteurs et variera pour chaque requête individuelle). D'autre part, si la condition where prend un temps non négligeable à calculer, vous pouvez réellement gagner du temps en la calculant une fois dans la vue interne plutôt que potentiellement deux fois (encore une fois, l'optimiseur peut réutiliser la première valeur ici - cela dépend).
Comme pour toutes les questions liées à la performance, il faut établir un profil pour voir ce qui est réellement nécessaire dans votre situation spécifique.