0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

クエリのアンチパターン

Posted at

SQLアンチパターンⅢ部のまとめメモです。
自分用にざっくりアンチパターンと解決策だけまとめるので、気になった方はぜひ書籍を読んでみてください。

アンチパターン:NULLを一般値として使う、または一般値をNULLとして使う

データ型を問わず、欠けている値にはNULLを使う。それ以外には使わない。

アンチパターン:非グループ化列を参照する

クエリのSELECT句に列挙されるすべての列は、行グループごとに単一の値の行でなければならない。(単一値の原則)

アンチパターン:データをランダムにソートする

非決定性を持つ式(RAND関数)によってソートを行うことは、テーブルスキャンが発生しインデックスを使えない高コストなソートが行われてしまう。
以下のテクニックを用いてクエリの結果からランダムに行を1つ選択するようにする

  • 1と最大値の間のランダムなキー値を選択する
  • 欠番の穴の後にあるキー値を選択する
  • すべてのキー値のリストを受け取り、ランダムに1つを選択する
  • オフセットを用いてランダムに行を選択する

アンチパターン:全文検索でパターンマッチ述語を使用する

パターンマッチ述語の最も大きな問題点は、テーブルスキャンが発生しインデックスを使えないこと。また、意図しないマッチが生じてしまうことが多い。
全文検索したいときは、各種データベース製品で提供される適切なツールを使用すること。

アンチパターン:複雑な問題をワンステップで解決しようとする

1つのクエリで複数のタスクを行おうとしない。
同じ結果を返す複雑で長い1つのクエリと単純な2つのクエリがあるとすれば、後者を選ぶこと。

アンチパターン:ショートカットの罠に陥る

タイプ数を減らすためSELECT句にワイルドカードや暗黙的な列指定を使用しない。
必要な列名は明示的に指定する。

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?