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

Otimização do MySQL na filtragem de pares de valores-chave como registros


Isso deve fornecer o que você precisa... Cada uma das condições da cláusula "OR"d where, você pode continuar adicionando como um item qualificado. Em seguida, basta ajustar a cláusula "Having" para atender ao mesmo número que os critérios que você está permitindo ... Coloquei a tabela de relações primeiro, pois isso teria um conjunto de correspondência menor no "Valor" da Cidade ou valores de tipo .. . Certifique-se de ter um índice na tabela de relações na coluna "VALUE".
SELECT STRAIGHT_JOIN
      rel.id_obj
   from 
      relations rel
         join attributes atr
            on rel.id_addr = atr.id
   where 
         ( rel.value = 'Apartment' AND atr.name = 'Type'  )
      or ( rel.value = 'Some City' AND atr.name = 'City' )
   group by 
      atr.id_obj
   having
      count(*) = 2
   limit
      0, 20

Se você quiser que todos os dados reais do objeto A partir desses resultados, você o envolva algo como ...
select obj.*
   from 
      ( complete SQL statement above ) PreQuery
         join Object obj on PreQuery.id_obj = obj.id