株式会社インフィニットループ PHPとスマホアプリ開発を行う札幌のシステム会社

技術ブログ

  1. トップ>
  2. 技術ブログ>
  3. ソーシャルゲーム開発者なら知っておきたい MySQL INDEX + EXPLAIN入門

2011年03月28日 (月)

著者 : 

ソーシャルゲーム開発者なら知っておきたい MySQL INDEX + EXPLAIN入門

広く浅くを担当してます、ota です。
技術ブログ第一回から早速流用スライドで申し訳ありませんが、社内勉強会資料として作成した「MySQL INDEX + EXPLAIN入門」です。

当社でもソーシャルゲームの開発を行っていますが、このような大量のデータを使用する・クエリの速度が求められる場合にインデックスは大変重要です。
インデックスの有効な利用にはDB設計者だけではなくプログラマにもある程度の知識が最低限必要となりますが、インデックスについての初心者向け資料があまりないようです。

このスライドではプログラマに知っておいて欲しい以下の基本的な点をまとめました。 

  • INDEXを使用する時に気をつけること
    • WHERE句
      • !=、<>はインデックスが使用できない
      • WHERE句の全てのANDにかかっていないインデックスは使用されない
      • 曖昧検索時、定数文字列+前方一致以外ではインデックスが使用できない
      • 複合インデックスとインデックスマージの違いについて
    • その他ORDER BY句、HAVING句について
  • INDEXを作成する時に気をつけること
    • 選択性の高い項目をインデックスにする
    • 複合インデックスは先頭から順に部分インデックスとしても使用できる
    • インデックスサイズを増やさない・増えることによる影響
  • EXPLAIN出力結果からできるSQLチューニング
    • 見るべき部分はtype、key、rows、Extra

データ作成に使用した基本のテーブルは以下のようなものです。

CREATE TABLE IF NOT EXISTS test_tbl (
  id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  col_1 int(11) NOT NULL,
  col_2 varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  col_3 int(11) NOT NULL,
  col_4 int(11) NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

テーブルの各カラムには 0〜1,000,000 の値を入れています。


【追記】
予想以上に好評なようなので、流し書きだった ORDER BY についても例を追加しました。
上のスライドが古いまま(表紙右下の更新日時が4/1でない場合古い)の場合は直接SlideShareへ飛んでください。(4/1)

5件のコメント

  1. 次回は是非、オプティマイザーについて語って欲しいです。DBを語る上で欠かせないので・・・。
    あとは、2分岐探索法についてとか・・・。

    2011年3月28日 21:38

    投稿者 : taka0024
  2. >taka0024 さま

     

    コメントありがとうございます。
    オプティマイザーの話良いですね。
    知っているとDB設計から変わったりしますがこれまたあまり資料見かけませんよね。
    次回の候補リストに入れさせていただきます。

    2011年4月4日 16:30

    投稿者 : ota
  3. サイトオープンおめでとうございます!一番内側の記事の外側の用紙の表現はないほうがいいかも…。やや窮屈にみえる。次回の記事も楽しみにしてます!

    2011年3月29日 19:21

    投稿者 : sa
  4. >sa さま

     

    ありがとうございます!
    ちょっと幅狭めでしたでしょうか…。
    デザイン変更時の参考にさせていただきます。

    2011年4月4日 16:42

    投稿者 : ota
  5. […] ソーシャルゲーム開発者なら知っておきたい MySQL INDEX + EXPLAIN入門 | 株式会社インフィニットループ技術ブログ […]

    2011年3月31日 23:32

  • このブログについて

    このブログは、札幌市の「株式会社インフィニットループ」が運営する技術ブログです。
    お仕事で使えるITネタを社員たちが発信します!

    最新の記事