ブックマーク / zenn.dev/nasu (1)

  • MySQLでIn句に大量の要素を渡すとまずい理由

    概要 MySQLでIN句を使用する時はIN句に渡す要素数に注意する必要があるとよく先輩エンジニアの方から聞いていたのですが、実際に大量の要素を渡すと何がまずいのかはっきり分かっていなかったので調べてみました。 この記事で伝えたいこと MySQLでIn句に大量の要素を渡すとまずい理由 まずい状況を回避するために気をつけるべきポイント 先に結論 MySQLでIN句に大量の要素を渡すとインデックスを貼っていたカラムだとしてもフルスキャンが発生しスロークエリになる可能性があります。 フルスキャンが発生してしまう条件はテーブルに設定してあるインデックスの内容とrange_optimizer_max_mem_size の設定値に依存しており、MySQL8でデフォルトの設定値 & シンプルなテーブルであってもおおよそ数万件の要素数をIN句に渡すとフルスキャンが発生する可能性があると考えられます。 検証環

    MySQLでIn句に大量の要素を渡すとまずい理由
    hase0510
    hase0510 2024/04/19
    結論に書いてる対処はどちらも微妙じゃないかな......2つの集合の共通成分が高速に得られればいいわけだけど、一方の集合がDBにあってもう一方がクエリ文字列だというのは筋が悪そうだな〜という感覚がある。
  • 1