LoginSignup
0
0

More than 1 year has passed since last update.

【MySQL】はじめてのクエリチューニング vol.4 インデックス以外のチューニング例

Last updated at Posted at 2020-02-16

インデックス作成はクエリチューニングにおいて、劇的な改善が期待できる重要なものですが

それ以外にもチューニングする方法はあり〼

その一例

目次

1.データ型の見直し

2.必要なカラムのみ指定

3.サブクエリの見直し

4.IN を EXISTSに

5.DISTINCTをEXISTSに

6.ALLを使う

データ型の見直し

テーブルに設定したデータ型と入力したデータのデータ型が異なっていた場合、

変更可能であればエラーにならず暗黙の型変換が行われ、その分時間がかかる

必要なカラムのみ指定

SELECT時に *(ワイルドカード) を使っていると不要なカラムまで取得することになる

全てのカラムを取得したい場合も、カラム名に置き換える処理が内部で行われているので書いた方が良い

サブクエリの見直し

・テーブル結合で書き換えられる場合もある

・EXISTSを使用したサブクエリの場合はテーブル結合よりEXSISTの方が早い場合もある

IN を EXISTSに

・書き換えられる場合は、ワークテーブルが作られない分INより速い

・該当する値があった場合検索をストップ

・WHERE(結合キー)にインデックスが貼られていれば実テーブルを見にいかなくてよい

ただOracle、PostgreはINでも同じパフォーマンスを発揮できるようになってきている

DISTINCTをEXISTSに

・ソートを回避できる分速くなる

ALLを使う

・集合演算子(UNION INTERSECT EXCEPT)は必ず重複削除が行われる

・重複が発生しない(重複削除が不要な)場合はUNION ALL のようにALLを使う

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