Disclaimer: tutto ciò che segue è solo aneddotico e tratto direttamente dalla mia esperienza personale. Chiunque si senta in grado di condurre un'analisi più empiricamente rigorosa è il benvenuto a portarla a termine e votare se lo sono. Sono anche consapevole del fatto che SQL è un linguaggio dichiarativo e non dovresti considerare COME viene elaborato il tuo codice quando lo scrivi, ma, poiché apprezzo il mio tempo, lo faccio.
Ci sono infinite affermazioni logicamente equivalenti, ma ne considererò tre (ish).
Caso 1: due confronti in un ordine standard (ordine di valutazione fisso)
A> = MinBound AND A <= MaxBound
Caso 2: zucchero sintattico (l'ordine di valutazione non è scelto dall'autore)
A TRA MinBound E MaxBound
Caso 3: due confronti in un ordine istruito (ordine di valutazione scelto al momento della scrittura)
A> = MinBound AND A <= MaxBound
O
A <= MaxBound AND A> = MinBound
Nella mia esperienza, il caso 1 e il caso 2 non presentano differenze consistenti o notevoli nelle prestazioni in quanto ignorano i set di dati.
Tuttavia, il caso 3 può migliorare notevolmente i tempi di esecuzione. In particolare, se stai lavorando con un set di dati di grandi dimensioni e hai qualche conoscenza euristica sul fatto che A sia più probabile che sia maggiore del MaxBound o minore del MinBound , puoi migliorare notevolmente i tempi di esecuzione utilizzando il caso 3 e ordinando i confronti di conseguenza.
Un caso d'uso che ho è l'interrogazione di un ampio set di dati storici con date non indicizzate per i record all'interno di un intervallo specifico. Durante la scrittura della query, avrò una buona idea se esistono o meno più dati PRIMA dell'intervallo specificato o DOPO l'intervallo specificato e posso ordinare i miei confronti di conseguenza. I tempi di esecuzione sono stati ridotti fino alla metà a seconda delle dimensioni del set di dati, della complessità della query e della quantità di record filtrati dal primo confronto.