Mysql
 sql >> Database >  >> RDS >> Mysql

Ottimizzazione MySQL sul filtraggio delle coppie chiave-valore come record

Questo dovrebbe darti ciò di cui hai bisogno ... Ciascuna delle condizioni della clausola "OR"d where, puoi semplicemente continuare ad aggiungere come elemento qualificato. Quindi, regola semplicemente la clausola "Avere" per soddisfare lo stesso numero dei criteri che stai consentendo ... Ho inserito prima la tabella delle relazioni in quanto avrebbe un insieme di corrispondenza più piccolo sul "Valore" di Città o valori di tipo .. . Assicurati di avere un indice nella tabella delle relazioni nella colonna "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 desideri tutti i dati dell'oggetto effettivi DA questi risultati, lo avvolgeresti in qualcosa del tipo...

select obj.*
   from 
      ( complete SQL statement above ) PreQuery
         join Object obj on PreQuery.id_obj = obj.id