Il *
è una scorciatoia per selezionare tutte le colonne dal set di risultati; il modo alternativo di scrivere questo è di scrivere tutte le colonne che ci si aspetta nella tabella contacts
, ad es. SELECT id, name, email FROM contacts WHERE name LIKE 'Bob%'
.
In parole povere, SELECT name, email FROM ...
significa "dimmi i nomi e gli indirizzi e-mail di ...", mentre SELECT * FROM ...
significa "dimmi tutto ciò che sai su ...".
Il motivo per cui le persone scoraggiano SELECT *
sono di due tipi: prima di tutto, se lo si utilizza nel codice di produzione e il database cambia per qualsiasi motivo, l'ordine delle colonne sarà disattivato e si recupereranno i risultati nelle variabili sbagliate . Se si specificano le colonne in modo esplicito, è possibile fare affidamento sul numero corretto e sull'ordinamento delle colonne dei risultati e la query avrà esito negativo se le colonne specificate non corrispondono a quelle trovate nel database.
Un altro motivo sono le prestazioni. SELECT *
significa che il DBMS deve eseguire una ricerca aggiuntiva per ottenere l'elenco di colonne. Significa anche che non hai pensato a ciò di cui hai realmente bisogno, quindi è probabile che raccoglierai più dati di quelli di cui hai bisogno, il che, considerando i tipici colli di bottiglia nelle prestazioni nelle applicazioni web, è qualcosa che vuoi davvero evitare.
Infine; i thread non hanno assolutamente nulla a che fare con questo. Niente di niente. Mi chiedo dove hai preso quella nozione; sembra che tu sia ancora abbastanza confuso sulla sintassi SQL.
TL; DR: SELECT *
è OK per le query attivate manualmente, ma dovresti evitarlo nel codice di produzione, perché può produrre risultati imprevisti e può portare a query inefficienti.