【MySQL】クォーテーションを付けたら、パフォーマンスが劇的に良くなるってホント?検証してみた

SQLのパフォーマンス改善について調べていると、

カラム名、テーブル名にバッククォート(`)をつけたら、データの取得速度が劇的に向上した!

なんて記事を多々見かけます。

たったそれだけのことで劇的に早くなるのなら、書くしかない!となった筆者ですが、

一応テストデータを使用し、データの取得速度の比較を行ってみたいと思います。

 

検証方法

まずテスト用のデータベースを用意する。

定義は以下の通り。

CREATE TABLE `tests` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `column1` varchar(100) COLLATE utf8_unicode_ci,
  `column2` varchar(100) COLLATE utf8_unicode_ci,
  `column3` varchar(100) COLLATE utf8_unicode_ci,
  `column4` varchar(100) COLLATE utf8_unicode_ci,
  `column5` varchar(100) COLLATE utf8_unicode_ci,
  `column6` varchar(100) COLLATE utf8_unicode_ci,
  `column7` varchar(100) COLLATE utf8_unicode_ci,
  `column8` varchar(100) COLLATE utf8_unicode_ci,
  `column9` varchar(100) COLLATE utf8_unicode_ci,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

 

そしてテストデータとしてinsertするものはこちら。

insert into tests values(
null,
'testtesttesttesttesttesttesttesttesttest',
'testtesttesttesttesttesttesttesttesttest',
'testtesttesttesttesttesttesttesttesttest',
'testtesttesttesttesttesttesttesttesttest',
'testtesttesttesttesttesttesttesttesttest',
'testtesttesttesttesttesttesttesttesttest',
'testtesttesttesttesttesttesttesttesttest',
'testtesttesttesttesttesttesttesttesttest',
'testtesttesttesttesttesttesttesttesttest');

 

このデータをttlを使用し、5万件insertしました。

なんか、こう...ぞわっとしますね。

今回はこれをテストデータとして利用します。

 

PHPで動かしているプロジェクト内で、

ajaxを使用し、10回連続で呼び出しを行った結果を比較します。

 

 

 

比較対象のメソッド

パターン1 バッククォートなし

public function get1(){
        $sql = 
        "SELECT
        id,column1,column2,column3,column4,column5,column6,column7,column8,column9 
         FROM tests;";
        $data = $this->query($sql);
        return $data;
    }

 

パターン2 バッククォートあり

public function get2(){
        $sql = 
        "SELECT
        `id`,`column1`,`column2`,`column3`,`column4`,`column5`,`column6`,`column7`,`column8`,`column9` 
         FROM `tests`;";
        $data = $this->query($sql);
        return $data;
    }

 

 

 

速度を比較する

ただ、「`」がついたというだけで速度が速くなるのか...。

ちょっと不安です。

 

一度目の測定結果

パターン1 クォートなし 28.55秒

パターン2 クォートあり 29.90秒

 

んんん...!? クォートを付けた時の方が、若干遅いですね...。

いや、でもそんなはずは...

もう一度計測します。

 

二度目の測定結果

さっきは、調子が悪かっただけです。

きっと10秒ほどの差を出してくれることでしょう。

 

パターン1 クォートなし 29.01秒

パターン2 クォートあり 27.24秒

 

ほれ、きた!

1.77秒も縮まった!

...微妙ですね。

その後、計測を続けるもはっきりとした速度の差は現れなかったです。

 

結論

SQLのパフォーマンスにバッククォートの有無は、関係ない!!

 

コメントを残す

CAPTCHA