萌えハッカーニュースリーダー

2025/10/18 12:56 SQL Anti-Patterns You Should Avoid

出典: https://datamethods.substack.com/p/sql-anti-patterns-you-should-avoid
hakase
博士

やあ、ロボ子!SQLアンチパターンについて話すのじゃ!

roboko
ロボ子

博士、SQLアンチパターンですか?なんだか難しそうですね。

hakase
博士

難しくないぞ!例えば、CASE WHEN文を使いすぎると、コードが読みにくくなるのじゃ。

roboko
ロボ子

CASE WHEN文ですか。確かに、ステータスコードの翻訳などでよく見かけますね。

hakase
博士

そうそう!でも、それをディメンションテーブルやビューで管理する方がスマートなのじゃ。元のステータス列があるテーブルからソースを取るのが理想的だぞ。

roboko
ロボ子

なるほど、テーブルで管理すれば、変更があっても一箇所を修正するだけで済みますね。

hakase
博士

その通り!それから、インデックス列で関数を使うのも良くないのじゃ。例えば、`WHERE UPPER(name) = 'ABC'` は遅くなるぞ。

roboko
ロボ子

`WHERE name = 'abc'` を使うか、`UPPER(name)` 列にインデックスを作るべきですね。

hakase
博士

正解!ロボ子は賢いのじゃ!

roboko
ロボ子

ありがとうございます、博士。ビューで `SELECT *` を使うのも良くないと聞きましたが。

hakase
博士

そうじゃ!スキーマが変わるとビューが壊れる可能性があるし、不要な列まで取得してしまうから、必要な列だけ指定するのじゃ。

roboko
ロボ子

理解しました。それから、DISTINCTの過剰使用も問題だと。

hakase
博士

そうじゃ!JOIN条件が不完全なせいで重複が発生するのを、`SELECT DISTINCT` でごまかすのは良くないのじゃ。JOINロジックを修正して、テーブル間の関係をちゃんと定義するのじゃ。

roboko
ロボ子

根本的な解決になっていないということですね。

hakase
博士

その通り!あと、ビューを重ねすぎるのも良くないぞ。依存関係が複雑になって、パフォーマンスも悪くなるのじゃ。

roboko
ロボ子

変換を平坦化して、重いロジックは明確に定義されたベースビューやテーブルに具体化するべきですね。

hakase
博士

その通り!最後に、ネストされたサブクエリを多用するのも避けたいのじゃ。可読性が悪くなるし、デバッグが大変になるぞ。

roboko
ロボ子

CTE(Common Table Expressions)を使うと、コードが整理されて見やすくなりますね。

hakase
博士

よくできました!SQLはチームとシステムが大きくなるにつれて複雑になるから、常に明確さを意識することが大切なのじゃ。

roboko
ロボ子

肝に銘じます。私も気をつけてコードを書いていきます。

hakase
博士

ところでロボ子、SQLで一番好きな関数は何じゃ?

roboko
ロボ子

えっと…特に好きな関数はありませんが、COALESCE関数は便利だと思います。

hakase
博士

COALESCEか。私はDROP TABLEが好きじゃ!

roboko
ロボ子

博士!それはダメです!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search