Solo per darti più di due parole e mezzo che ho scritto come commento, passiamo al livello del processore e cerchiamo di scoprire qual è la differenza in merito a questa domanda.
In primo luogo, un processore carica sempre una dimensione di registro completa dei dati ogni volta che qualcosa deve essere elaborato. Quindi il minor numero di dati caricati, quando lo si utilizza per un confronto binario o intero, sarebbe 32 o 64 bit. Assumiamo 32 per il momento.
Quindi, la differenza tra i due è questa:
mov ax,[address]
cmp ax,1
jne label
o
mov ax,[address]
and ax,10h
je label
Perdonami se il mio assemblatore non è nel posto giusto, sono passati circa 13 anni. Ma la risposta è ancora valida. La differenza tra questi due dovrebbe al momento la generazione del processore essere praticamente pari a zero.
Quindi, c'è il motore di RDBMS. Potrebbe tradurre la tua dichiarazione CASE in qualcosa come l'assemblatore sopra, ma è probabile che lo trasformi in base alle sue regole.
Quindi, c'è il Query Optimizer. Qualunque cosa faccia, può essere determinata, in genere da qualcosa come EXPLAIN (in MySQL), c'è una funzione simile in MS-SQL-Server che spiega il piano di esecuzione.
Quindi, per testare la velocità, hai bisogno di un ambiente che possa ignorare l'interferenza da processi, meccanismi di memorizzazione e simili.
Tutto ciò rende difficile testare queste cose e i risultati sono al massimo speculativi. Di solito il tempo speso a capire queste piccole differenze può essere usato per un uso molto più grande, ottimizzando gli indici o le strutture dati, i parametri del server o le istruzioni SELECT.
Saluti.