SQLは奥が深い

Date:

Share post:

SELECT A.id FROM A WHERE A.id2 IN (SELECT B.id FROM B, C, D WHERE (B.id2 = C.id AND C.name LIKE '%test%') OR (B.id2 = D.id AND D.name LIKE '%test%'));

テーブルCまたはテーブルDに「test」を名前に含むレコードと紐付くテーブルBのレコードに紐付くテーブルAのレコードを抽出したい。
これを素直に1文にすると上記のようなSQLになる。

しかし、このSQLを実行するととても重い。

そこで、テーブルCとテーブルDを分割してみる。

SELECT A.id FROM A WHERE A.id2 IN (SELECT B.id FROM B, C WHERE B.id2 = C.id AND C.name LIKE '%test%') OR A.id2 IN (SELECT B.id FROM B, D WHERE B.id2 = D.id AND D.name LIKE '%test%');

こうするととても速くなった。
何故なのか?

何故劇的に変わるのかは今後の課題として、
SQLは書き方1つで性能に大きな差異が出る事もあり、
まだまだ修行が必要だと痛感する今日この頃…

Related articles

フロント担当のTIL 2025/07

「Today I Learned(今日学んだこと)」を記録するTIL、7月は社内のAI活用が本格的に動き出しました。グラボが新しすぎ問題に遭遇したり、巨大なモデルを無理やり動かしてみたり。

Difyでナレッジと検索の両方の結果で回答してほし...

最新情報はナレッジだけでは網羅できな...

ファインチューニング(2)

前回の投稿(ファインチューニング(1...

ファインチューニング(1)

前回の投稿(ラベル画像のエンベディン...