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

MySQLはサブクエリを自動的に最適化しますか?

    残念ながら、MySQLはINを使用したサブクエリの最適化にはあまり適していません。これは、MySQLドキュメント からのものです。 :

    代わりにJOINを使用してみてください。

    MySQLは裏返しに機能するため、サブクエリを次のようにさらに別のサブクエリ内にラップすることで、MySQLをだますことができる場合があります。

    SELECT COUNT(*) FROM table_name WHERE device_id IN
         (SELECT * FROM (SELECT DISTINCT device_id FROM table_name WHERE NAME = 'SOME_PARA') tmp)
    

    JOINソリューションは次のとおりです。

    SELECT COUNT(DISTINCT t2.id) FROM table_name t1
      JOIN table_name t2
        ON t2.device_id = t1.device_id
      WHERE t1.NAME = 'SOME_PARA'
    

    私は内側から始めて、外にも出ていることに注意してください。



    1. 同じIDを持つ別のテーブルの行が別の列の特定の値を持つテーブルから行を選択します

    2. SQLテーブルで重複する値を見つける方法

    3. where句のmySQL正規表現

    4. MySQLのWHERE列=での疑問符の重要性は何ですか?