BEM VINDO AO BLOG DO MARCOS CARRARO CRIADOR DO "CARRARO DASHBOARD". MUITO MAIS QUE UM SIMPLES BLOG.

quinta-feira, 3 de abril de 2014

Mysql Usando CASE com WHERE com Coluna Virtual - ATUALIZADO

Buenas,

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


Um comentário:

Posts que a turma mais esta lendo...

Posts que a turma mais esta lendo...

Marcos Carraro