備忘録のような

趣味グラマによる個人的な見解、備忘

SQLのパフォーマンス向上で気をつけてること

 

少し釣り気味なタイトルですが、気にしないでください^^;(優しい瞳)

 

 

僕「~っとSQLコマンド実行っ!(タターン)」

~数秒後~

僕「おせええええええええええええ(憤怒)」

とまぁあるある(押しつけ)

 

唐突な本題

 

 

 

SQL文は色々な書き方のパターンがあると思いますが、書き方によっては無駄な処理をしたりで速度が遅くなったりすると思います。

 

 

実行環境やテーブル構造によって最適な文、書き方は多少違うかもですが、少しいじるだけでかなり速度が上がったりします。

JOINに親を○された(愛され)SELECT WHERE LIKE しかしらない僕並みに列記していきます。SQLite3?です

 

テーブル構造は、今回はこんな感じを想定(べ、別に手抜きじゃないですよ

 

テーブル名 カラム名idの中身 カラム名
Color 1 colorCode
History 1 hCode

 

 

なんかの例

 

最初はColorテーブルにあるcolorCodeの値を検索する時にやりそうなSQL

 

SELECT * FROM Color WHERE colorCode LIKE 'red';

 

いや、まあこれでもいいのですが、カラムやレコードの数が増えるほど無駄な処理がでます(多分)なのでちょいと修正してきます

 

まず、SELECT * FROM しなぃ

ちゃんと SELECT colorCode FROM にして面倒でも必要なカラムだけ指定してあげましょう

今回の駄例テーブル(笑)だとカラムが二つだけなのであんまりわからないですが普通はもっとカラムがあると思います必要なカラムのみ指定して無駄な索敵はやめようね!(ゴーヤ)

 

はい!どんどんいきましょー( 何も無し )

 

って漢字(感じ)です。例がつまらない?ほならn

 

外部結合(LEFT OUTER JOIN)

現在のカラーコードとヒストリーが正しいか照らし合わせようとするきに(どんなときだw)

にやっていそうなSQL

 

SELECT CodeColor.id, Color.color, History.id, History.hCode

FROM Color

LEFT OUTER JOIN History

ON Color.id = History.id

WHERE Color.colorCode LIKE 'red' AND History.hCode Like'Blue';

 

試してないけど<<<<<

こんな感じだと思いますが、大体自分ならこうします

 

SELECT Color.color, History.hCode

FROM Color,History

 

WHERE Color.colorCode LIKE 'red' AND History.hCode LIKE 'Blue';

 

あまりSQLを理解できていないのが現状な僕なので

JOINは重いんや…JOINは重いんや…JOINは重いんや…

と言う感じで説明できませんがこっちの方が早いときもあるのでこのような書き方もあるとだけ

 

 

最後に&余談

SQLにはINDEXなるちょーすげー(小並)なものがあるのでこいつもばしばし使い倒しましょう。

 

 

いや~最近SELECTしすぎてサンプルもSELECTしちゃいましたよ~(裏声)

これ誰得だろ^^;;

 

関係ないですがこのブログを書いて文章力を高めるとかとか~の目標?があったり

ブログやるの久しぶりだったり頭が弱いこともあり(言い訳)糞みたいですが

PHP C# Python TensorFlow Chainer とかとかにわにわな僕が書いてくと思うので

どうぞ今後ともよろしくおなしゃす^^;;;;;

では初記事なんてぱぱっとやって終わり!ほいじゃまったの~~ぅ

 

追記

結論から、JOINってちゃんと使えば早いですね

いや~上記にあるFROMで二つ指定して二つのテーブルを総当たりってやり方は早いのですがちょっと自分の求めていた結果が取得できなく、結局JOINを使ってパフォーマンスを向上させるかなったんですがとりあえず遅い原因を探っていたらAUTOMATIC COVERING INDEXなる一時的にINDEXを作成する此奴が原因っぽいっすね

よくわかりませんが外部テーブルのインデックスがうまく動作していなく自動INDEX生成する処理が行われていた為に遅くなっていますた;q;

なのでインデックスを作り直したところ10秒辺りから0.00n秒までパフォーマンスアップ!やったね!!