ラベル DB の投稿を表示しています。 すべての投稿を表示
ラベル DB の投稿を表示しています。 すべての投稿を表示

2021年3月19日金曜日

SQL文備忘録

 SQLステートメントの備忘録

角括弧[]の使い方

  • 列名などに特殊な名称(ハイフンなどの記号、数字から始まる)の場合はエラーになるので、それを防ぐために列名が括弧で囲われる(VS2019ではDBから読み込むSQL文は自動でつくようになっている)
ワイルドカード指定
  • 「%」がワイルドカード指定になる(ほかにも「_」があるが、「%」は0個以上の文字、「_」は1個の文字を表す)
  • 文字列+'%'とすれば文字列前方一致、'%'+文字列とすれば後方一致、'%'+文字列+'%'なら部分一致となる
  • VS2019のWHERE句の追加でパラメータのプロパティの部分の規定値は「%」にしておけば最初すべてが表示されるようになる
  • ワイルドカード文字はDBによって異なる → ACCESSの場合は「%」→「*」、「_」→「?」に置き換える必要がある

2021年3月10日水曜日

SQLのN+1問題備忘録

N+1問題とは

ループ処理の中でSQLを発行 → 大量増殖(ねずみ講式)


回避方法

  • JOINする → 予めJOINしてテーブルをくっつけておく
  • Eager Loadする → 予めSELECTで引っ張っておく
大量の別テーブルをループで回していくから増殖する

EagerLoadとLazyLoadの違い

EagerLoad



先にがばっとセレクトしておく方法

LazyLoad

都度都度SQLを発行する(ねずみ講式)

当たり前だが、EagerLoadの方がパフォーマンスが速い(SQLの発行数が少ない)

対策時の注意点

  • メモリオーバーする可能性がある(スワップの発生)
  • 必要に応じて件数を区切りながら処理する必要がある

出典