sql >> データベース >  >> RDS >> Mysql

キーと値のペアをレコードとしてフィルタリングするためのMySQLの最適化

    これにより、必要なものが得られるはずです...「OR」d where句の条件のそれぞれは、修飾されたアイテムとして追加し続けることができます。次に、許可する基準と同じ数を満たすように「Having」句を調整します... Cityまたはtypevaluesの「Value」に一致するセットが小さいため、リレーションテーブルを最初に配置しました。 。「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
    

    この結果からすべての実際のオブジェクトデータが必要な場合は、次のようにラップします...

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



    1. mysql接続を開いたままにします

    2. 更新のターゲットとデータの個別のソースの両方として2回指定されたテーブル名

    3. PostgreSQLのselectクエリのテーブル名を二重引用符で囲みます

    4. マネージドPostgreSQLクラウドソリューションのベンチマーク-パート1:Amazon Aurora