な、なんと person_diaryはインデックスが適用されずにフルスキャンされ(1行目のkeyがNULL) 逆にpersonはid列に設定してあるプライマリキーが適用される(2行目のkeyがPRIMARY) という二つの謎な現象が発生しました。 そもそもpersonはnameカラムに対してLIKE検索しているのに、id列のプライマリキーが効いちゃうのは全く納得いきません。なぜ、どうしてこんなことが起こるのでしょう? 原因 私がMySQLに期待していた動きとしては ①サブクエリを実行してperson.idのリストをメモリ中に作成 ②person.person_idに張られているインデックスを使って検索 というところでした。 期待通りに動いてくれなかったのには二つのMySQLの特性が関係していました。 特性① サブクエリを含むSQLは外側から先に実行される MySQLの場合、サブクエリを含む
![MySQLではIN句とサブクエリの組み合わせはインデックスが効かない!?](https://cdn-ak-scissors.b.st-hatena.com/image/square/168fb3c2e97b819a4219b36ce052391d10cfd80e/height=288;version=1;width=512/https%3A%2F%2Ftech.aainc.co.jp%2Fwordpress%2Fwp-content%2Fuploads%2F2023%2F06%2F2.jpg)