06/09/2024 - migliorabile ha scritto:
creare l'indice vuol dire modificare il database, dove una semplice query e' SOLO questione di codice
Se la query viene eseguita a ogni inserimento/aggiornamento, e quindi viene eseguita frequentemente, quei campi andrebbero indicizzati.
06/09/2024 - migliorabile ha scritto:
quando si fa una insert che viola un “constraint” viene generata un'"eccezzione" che deve essere opportunamente gestita, dove la query e' ESPLICITAMENTE implementata e quindi il problema e' anche ESPLICITAMENTE gestito
Se l'eccezione è opportunamente gestita, quella “gestione opportuna” è anche una “gestione esplicita”.
06/09/2024 - migliorabile ha scritto:
la violazione del “constraint” non e' l'UNICO tipo di eccezzione che si potrebbe verificare, quindi quando si gestisce l'eccezzione si deve controllare se e' stata generata ESATTAMENTE dalla duplicazione de codice e NON per qualche altro motivo.
Qualsiasi libreria di accesso ai dati ti fornisce tutte queste informazioni, e molte di più. Non vedo il problema.
06/09/2024 - migliorabile ha scritto:
il doppio statement non impatta significativamente sulle performance
Essendo un “doppio” statement, i tempi sono esattamente il doppio, anche di più senza l'indice e in presenza di molti dati.
06/09/2024 - migliorabile ha scritto:
SE e' fatto a fronte di un'azione “umana” i cui tempi sono nell'ordine del secondo o piu', la' dove una select impiega forse 1 millisecondo (quindi si possono gestire 500 select+insert al secondo)
L'azione umana può attendere di più, ma le tempistiche variano sensibilmente all'aumentare dei dati, a meno di non mettere un indice, da cui poi la scelta di far lavorare l'indice a questo scopo. La SELECT impiega forse 1 millisecondo, ma non sarà sempre così all'aumentare dei dati. Di fatto si sta già realizzando un sistema che non è scalabile.
06/09/2024 - migliorabile ha scritto:
Insomma, “si MA forse”
Manca comunque la gestione delle problematiche indicate dall'utente amorosik: per evitare violazioni alla regola, devi mettere in gioco transazioni o “blocco di record”, e questo è senz'altro ben più complesso di gestire una eccezione per motivi specifici (e documentabili/commentabili, nel codice e altrove), posto che senza indice i tempi della query aumentano comunque all'aumentare dei dati.
Il “forse” lo metterei solo in un caso: qualora la condizione da verificare fosse particolarmente complessa da non poter essere realizzata con un semplice indice univoco. Ma un indice andrebbe inserito comunque per la query sui campi coinvolti, pena il degrado al crescere del volume di dati.
Poi certo, stiamo parlando di Access, quindi non mi aspetto uno scenario di Big Data… :D