Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Optimierung beim Filtern von Schlüssel-Wert-Paaren als Datensätze

Damit sollten Sie das bekommen, was Sie brauchen ... Jede der Bedingungen der "ODER"-Wo-Klausel können Sie einfach weiter als qualifiziertes Element hinzufügen. Passen Sie dann einfach die Klausel "Haben" an, um die gleiche Anzahl wie die Kriterien zu erfüllen, die Sie zulassen ... Ich habe die Beziehungstabelle an die erste Stelle gesetzt, da dies einen kleineren übereinstimmenden Satz für den "Wert" von Stadt- oder Typwerten hätte. Stellen Sie sicher, dass Sie einen Index für die Beziehungstabelle in der Spalte "WERT" haben.

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

Wenn Sie alle tatsächlichen Objektdaten AUS diesen Ergebnissen haben möchten, würden Sie sie in etwa so umschließen...

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