Mysql
 sql >> Base de données >  >> RDS >> Mysql

Jointure efficace sur des plages d'intervalles en SQL

Je ne sais pas comment tout cela fonctionne en interne, mais selon la situation, je conseillerais de jouer avec une table qui "déploie" toutes les valeurs de d1, puis se joint à celle-ci. De cette façon, le moteur de requête peut identifier "exactement" le bon enregistrement au lieu d'avoir à trouver une combinaison de limites correspondant à la valeur recherchée.

ex.

x value
a  1
a  2
a  3
b  5
b  6
b  7
b  8
b  9
b 10
b 11
c 19 etc..

étant donné un index sur la colonne de valeur (**), cela devrait être un peu plus rapide que de se joindre avec le début ET la fin ENTRE sur la table d1 d'origine à mon humble avis.

Bien sûr, chaque fois que vous apportez des modifications à d1, vous devrez également ajuster la table déployée (déclencheur ?). Si cela se produit fréquemment, vous passerez plus de temps à mettre à jour le tableau déployé que vous n'en avez gagné au départ ! De plus, cela peut prendre rapidement un peu d'espace (disque) si certains des intervalles sont vraiment grands ; et aussi, cela suppose que nous n'avons pas besoin de rechercher des nombres non entiers (par exemple, que se passe-t-il si nous recherchons la valeur 3,14 ?)

(Vous pourriez envisager d'en expérimenter un unique sur (valeur, x) ici...)