14/09/2023 - Mailman ha scritto:
Per Alex: ho troppa stima per il supporto che dai al forum, per cui non commento ulteriormente il tuo ultimo post che forse e' stato scritto “un po' frettolosamente” senza avere letto bene i post sopra.
P.S.: Se le query funzionano e danno i risultati richiesti, non vedo perche' debbano essere sbagliate…
Purtroppo la tua considerazione è troppo generica e non affatto tecnica però provo ad entrare nel merito.
Le queries possono essere scritte in vari modi e magari tutte le versioni restituiscono gli stessi dati ma una, mal scritta, impiega 100 volte come tempo di esecuzione rispetto ad una ben scritta scambiando in rete una quantità di dati estremamente differente.
L'approccio del basta che funzioni lo ritengo non degno di discussione, ma siccome penso tu possa aver risposto in modo frettoloso, magari non conoscendo a pieno la differenza tra una risoluzione lato server ed una risoluzione lato client provo a darti un esempio finalizzato a farti capire il senso tecnico della mia precedente osservazione.
SELECT * FROM T1 WHERE ID=1
SELECT * FROM T1 WHERE ID=FORMS!TuaForm!TuoID
Ovviamente considero che:
FORMS!TuaForm!TuoID=1
Queste 2 queries sicuramente funzionano entrambe restituendo sempre 1 Record… ma… la prima viene risolta dal server che elabora la WHERE CONDITION restituendo al CLIENT solo il record individuato … con tempi di esecuzione velocissimi e traffico dati MINIMO.
La seconda VERSIONE non viene compresa dal server perché non riconosce il riferimento [Forms!TuaForm!TuoID] di conseguenza elimina la WHERE restituendo al CLIENT tutta la tabella e delegando il Client ad applicare la WHERE…
RISULTATO: traffico dati massimo e tempi di esecuzione veramente molto più pesanti, pur visualizzando solo 1 record.
Chiaramente il mio è un esempio banale ma concreto e se fai attenzione è proprio l'errore che hai commesso tu, a mio avviso in modo non consapevole…, di cui ho provato a darti segnalazione.
Questo chiarisce senza possibilità di interpretazione che la 2° query è MALFATTA e tecnicamente da non fare.
Il concetto ovviamente non è mio… ma di pubblico dominio per chi sviluppa, dimostrabile con gli strumenti di analisi e management del database… non a sensazione verificando che funziona… ;-)
Ora siccome usi un RDBMS serio, se non hai la piena consapevolezza di questi concetti rischi non solo di non apprezzare un suggerimento utile, questo pazienza a me non crea dispiacere, ma di costruire un prodotto con forti limitazioni, hai una Ferrari che usi come una Panda con il freno a mano tirato… poi per carità per me puoi trovare perfetto anche questo metodo… ma non lo spacciamo come vero a chi legge.
Spero tu possa avere una più aperta visione tecnica e magari con meno pregiudizi ;-) mettendo in discussione qualche tuo assunto errato.
Buon lavoro