0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UKでの存在チェックSQL、LIMIT句は必要か?

Last updated at Posted at 2024-12-25

背景

プロジェクト内で、レコードの存在チェックをする際
以下のようにWHERE句でUKまたはPKが指定されている場合、末尾にLIMIT句を設けるべきか否かが話題に上がった。

指定ユーザーの存在チェック
SELECT 
    1
FROM 
    users
WHERE 
    user_id = #{userId}
LIMIT
    1

意見①:UKだしLIMIT句は不要でいいんじゃない?
意見②:他の存在チェックのSQLで、条件にUKを使用していないものもある。統一感を出すためにも、UKでもLIMIT句つける方針が良いのでは?
意見③:つけたところでパフォーマンス向上するんですかね?

結論

LIMIT句つけてもパフォーマンスはほぼ変化しない。

理由

SQLは、以下の順序で実行されます。

  1. from:対象テーブルの指定
  2. join:結合するテーブルの指定
  3. where:条件絞り込み
  4. group by:グループ化
  5. sum,avgなど:集合関数
  6. having:グループ化後の絞り込み
  7. select, distinct:抽出項目の指定
  8. order by:並べ替え
  9. limit:取得件数の指定

上記の通り、limitで件数を絞るのは最後になるため、前述のUKを条件に指定した存在チェックのSQLのパフォーマンスの改善という意味では、あまり意味を成さないことがわかりました。

最終結論

上記の調査をもとに、最終的にうちのチームでは、なくても良いが統一感を出しましょう。ということになり、基本的に存在チェックはLIMIT句を設ける運びとなりました。


以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?