Ultimamente ho sentito molto che SQL è un linguaggio terribile e sembra che ogni framework sotto il sole sia preconfezionato con un livello di astrazione del database.
Nota che questi livelli convertono semplicemente le loro cose in SQL
. Per la maggior parte dei fornitori di database SQL
è l'unico modo per comunicare con il motore.
Nella mia esperienza, tuttavia, SQL è spesso il modo molto più semplice, versatile e intuitivo per gestire l'input e l'output dei dati. Ogni livello di astrazione che ho usato sembra essere un approccio notevolmente limitato senza alcun vantaggio reale.
... motivo per il quale ho appena descritto sopra.
I livelli del database non aggiungono nulla, ti limitano . Rendono le query discutibilmente più semplici ma mai più efficienti.
Per definizione, non c'è nulla nei livelli del database che non sia presente SQL
.
Cosa rende SQL
così terribile e perché i livelli di astrazione del database sono preziosi?
SQL
è un bel linguaggio, tuttavia, ci vuole un po 'di stravolgimento del cervello per lavorarci.
In teoria, SQL
è dichiarativo, cioè dichiari ciò che vuoi ottenere e il motore lo fornisce nel modo più veloce possibile.
In pratica, ci sono molti modi per formulare una query corretta (ovvero la query che restituisce risultati corretti).
Gli ottimizzatori sono in grado di costruire un castello Lego con alcuni algoritmi predefiniti (sì, sono multipli), ma semplicemente non possono creare nuovi algoritmi. Ci vuole ancora un fileSQL
sviluppatore per assisterli.
Tuttavia, alcune persone si aspettano che l'ottimizzatore produca "il miglior piano possibile", non "il miglior piano disponibile per questa query con una data implementazione del SQL
motore".
E come tutti sappiamo, quando il programma per computer non soddisfa le aspettative delle persone, è il programma che viene incolpato, non le aspettative.
Nella maggior parte dei casi, tuttavia, riformulare una query può produrre effettivamente il miglior piano possibile. Ci sono attività in cui è impossibile, tuttavia, con i nuovi e crescenti miglioramenti aSQL
questi casi diventano sempre meno numerosi.
Sarebbe bello, tuttavia, se i fornitori fornissero un accesso di basso livello a funzioni come "ottieni l'intervallo di indice", "ottieni una riga per rowid
" ecc., ComeC
compilatori ti permettessero di incorporare l'assembly direttamente nel linguaggio.
Recentemente ho scritto un articolo su questo nel mio blog: