アプリケーションで長々SQLを書かなきゃいけないんだけど、
条件によってはSQLを評価しないときってあるかと思います。
たとえば、検索するときの対象テーブルとして、
- 記事
- 動画
の2つがあったとき、条件によっては、記事のみにしたいって場合です。
このとき、アプリケーションのIFで、動画のSQLは流さないようにするってのが普通だと思うんですが、
CTE(WITH)とか使っていると、後続の式(たとえばUNION)で動画の分を抜くとか調整しなくちゃいけなくてめんどくさかったり。。
そんなとき、ちょっと役に立つ技が「LIMIT 0」です。
これは、公式にも書いてあるように、即座に空の結果セットを返すというものです。
https://dev.mysql.com/doc/refman/8.0/ja/limit-optimization.html
explain時のExtraには、「Zero limit」というのが表示されます。
それ以外にも、SQLとして正しいかどうかだけをチェックするときにも使えたりします。
「LIMIT 0」以外にも、自分の小ネタを紹介しておきます。
たとえば、アプリケーションでWHEREを組み立てなきゃいけないとき、
条件がなにもなかったら、WHERE句自体を消すとかもありますよね。
そんなとき、自分は「1 = 1」で初期化しておくみたいなこともやったりします。
そうすると、WHERE句自体は残したままでよくなるので、文字列編集の煩わしさが減ります。
「LIMIT 0」とか「WHERE 1 = 1」とか、はっきいって邪道ですが、
使うと意外にアプリケーションでのSQL構築が楽になったりします。
以上