Help us understand the problem. What is going on with this article?

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

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

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

その一例

目次

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を使う

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした