Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@okasir4444

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

More than 1 year has passed since last update.

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

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

その一例

目次

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
Help us understand the problem. What is going on with this article?
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.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?