Precisa fazer um JOIN em 2 tabelas com base em colunas que possuem diferentes tipos de coluna.
Na tabela A, tenho um campo DATETIME e, na tabela B, tenho um campo DATE e um campo TIME, que combinados corresponderiam ao campo DATETIME da tabela A.
Qual seria a sintaxe recomendada para melhor desempenho em tal cláusula de junção?
BD: MySQL 5.5.43-0+deb8u1-log
PD: Alguma informação extra necessária?
Você pode usar
ADDTIME()
a função:Isso pode usar um índice,
tableA (datetime_column)
mas não um índice emtableB
. O inverso pode usar um índice em,tableB (date_column, time_column)
mas não em A:Não custa nada testar as duas versões. Se uma tabela for muito maior que a outra, prefira ter as colunas da tabela maior expostas (não convertidas) para que seu índice possa ser usado.
Se você mudar para MariaDB (qualquer versão 5.3+) ou MySQL 5.7 (quando for lançado), você pode definir uma
VIRTUAL
coluna (ou duas) em uma das duas tabelas para manter essa conversão/cálculo que pode ser persistido e indexado.No 5.5, se a eficiência não for boa, o que é esperado com tabelas grandes, você mesmo pode adicionar uma coluna computada, mas ela deve ser preenchida durante as inserções e mantida em sincronia durante as atualizações feitas por você (por exemplo, usando gatilhos).