Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Unindo com eficiência intervalos de intervalo no SQL


Não tenho certeza de como tudo funciona internamente, mas dependendo da situação, eu aconselho a brincar com uma mesa que 'desenvolva' todos os valores de d1 e depois junte-se a ela. Dessa forma, o mecanismo de consulta pode identificar o registro correto 'exatamente', em vez de ter que encontrar uma combinação de limites que correspondam ao valor que está sendo procurado.

por exemplo.
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..

dado um índice na coluna de valor (**), isso deve ser um pouco mais rápido do que unir com o início E o fim BETWEEN na tabela d1 original IMHO.

Claro, cada vez que você fizer alterações em d1, você precisará ajustar a tabela lançada também (gatilho?). Se isso acontecer com frequência, você gastará mais tempo atualizando a tabela lançada do que ganhou em primeiro lugar! Além disso, isso pode levar um pouco de espaço (em disco) rapidamente se alguns dos intervalos forem muito grandes; e também, isso pressupõe que não precisamos procurar por números não inteiros (por exemplo, e se procurarmos o valor 3,14 ?)

(Você pode experimentar um único em (valor, x) aqui...)