"Meglio" potrebbe avere molti significati. Questa è una domanda complicata e la risposta richiederebbe alcune ipotesi. Ad ogni modo, aggiungerò i miei 2 centesimi ...
Nel tuo caso, e l'indice non aiuterà. L'ottimizzatore probabilmente lo ignorerà poiché hai solo 2 tipi.
Per eseguire la query sul server, puoi prendere in considerazione 3 fattori che influenzano la velocità di risposta:
-
Tempo di connessione - Può essere risolto con un pool di connessioni di grandi dimensioni.
-
Tempo di esecuzione delle query - Può essere affrontato in molti modi, come ad esempio la corretta progettazione delle tabelle, la creazione di buoni indici, ecc. Ma in questo caso, ciò non sarà di aiuto. Prova a non usare SELECT * se puoi e ottieni solo le colonne necessarie.
-
Tempo di comunicazione tra il client e il server - Può essere indirizzato rendendo i dati trasferiti più piccoli quando possibile (si sovrappone anche a 2).
Da quanto sopra, possiamo dire che, per eseguire 2 query separate, dovrai:
A - Effettua 2 connessioni dal client al server.
B - Leggi l'intera tabella 2 volte, 1 per ogni query, poiché presupponiamo che l'indice verrà ignorato.
Supponendo che:
-
La rete gestirà qualsiasi dimensione di dati in modo lineare e
-
La rete può gestire il trasferimento dei big data e
-
Il server di database non rilascia la connessione nel mezzo (grandi rischi) e
-
L'applicazione può contenere l'intero set di risultati restituito in memoria,
-
Il tempo richiesto per leggere i dati dal disco è inferiore al tempo necessario per inserire i dati in una struttura di programma come un array.
Quindi, suppongo che il filtraggio dei dati sul client sarebbe più rapido da un punto di vista prestazionale, perché useresti 1 connessione al database e 1 la lettura della tabella dal disco dal database, la seconda lettura sarà dalla memoria solo.
La differenza potrebbe non essere percepita a meno che la tabella non sia molto grande.
Detto ciò, proverei ancora a lasciare che il database faccia il filtraggio ed emetta due query separate. Questo perché questa operazione è comunemente considerata una delle sue responsabilità. Inoltre, in alcuni casi, puoi eseguire l'elaborazione parallela, in cui esegui 1 query e inizi a utilizzare i dati restituiti mentre l'altra query è ancora in esecuzione.