quinta-feira, 3 de abril de 2014
Mysql Usando CASE com WHERE com Coluna Virtual - ATUALIZADO
Muitas vezes precisamos montar uma coluna virtual no mysql somente para aquela consulta, onde devemos aplicar um filtro, sem ter que ir para a programação apenas no banco para termos um desempenho melhor.
A situação.
Tabela Dias
Colunas
ID DIA HORA
Precisamos comparar alguns valores se estiverem OK retornar 1 caso contrário retornar 0
select
ID,
@DiaValido := (CASE WHEN (DAYOFWEEK(NOW()) = '7' && a.dia = '7')&&(DAYOFWEEK(NOW()) = '7' && b.dia = '1' ) THEN '1'
WHEN (DAYOFWEEK(NOW()) >= a.dia) && (DAYOFWEEK(NOW()) <= b.dia) then '1'
ELSE '0' END) as DiaValido
from
Dias a,
Dias b,
where @DiaValido = 1
Desta maneira conseguimos obter melhor desempenho, pois não vamos precisar programar, apenas fazendo a consulta no banco, ganhando assim mais performance.
Atualizando 03/04/2014 - 1058 .
A consulta anterior estava levando 2.15ms para retornar banco pequeno, máquina pequena.
Ao invés de criar uma Coluna Virtual (nome verdadeiro Variável), utilizei o parâmetro HAVING, com isso ganhei 0,20 ms de tempo, pensando em um banco maior, com mais registros....
select
ID,
(CASE WHEN (DAYOFWEEK(NOW()) = '7' && a.dia = '7')&&(DAYOFWEEK(NOW()) = '7' && b.dia = '1' ) THEN '1'
WHEN (DAYOFWEEK(NOW()) >= a.dia) && (DAYOFWEEK(NOW()) <= b.dia) then '1'
ELSE '0' END) as DiaValido
from
Dias a,
Dias b,
HAVING DiaValido = 1
Forte quebra costelas
Marcos Carraro
Marcadores:
desempenho,
mysql,
performance,
php,
programação,
sql
Assinar:
Postar comentários (Atom)
Me salvou!
ResponderExcluir