最近SQLのパフォーマンスを気にしだしている筆者です。

こんな記事を見かけたので、検証してみようと思います。

MySQLのChar型は”(ダブルクォーテーション)ではなく'(シングルクォーテーション)でSELECT

 

検証方法

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

定義は以下の通り。

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しました。

何か気づいたかたがいるかもしれませんが、前回と同じ環境です。

 

https://d1gk62opoknolq.cloudfront.net/2019/07/10/【mysql】クォーテーションを付けたら、パフォーマ/

 

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

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

 

比較対象のメソッド

パターン1 シングルクォーテーションを使用

public function get1(){
        $sql = 
        'SELECT * FROM tests;';
        $data = $this->query($sql);
        return $data;
    } パターン2 ダブルクォーテーションを使用
public function get2(){
        $sql = 
        "SELECT * FROM tests;";
        $data = $this->query($sql);
        return $data;
    }

 

 

 

 

速度を比較する

参考にした記事では、確かシングルクォーテーションのがパフォーマンスが良いということでしたね。

今度こそは速くなってくれよ...

 

一回目の測定結果

パターン1 シングルクォーテーション 36.46秒

 

パターン2 ダブルクォーテーション 33.54秒

 

あれ...?

とりあえず、もう一回図ってみましょう。

 

二回目の測定結果

パターン1 シングルクォーテーション 35.90秒

 

パターン2 ダブルクォーテーション 34.70秒

 

むむ...

も、もう一回...!(汗)

 

三回目の測定結果

パターン1 シングルクォーテーション 36.80秒

 

パターン2 ダブルクォーテーション 33.53秒

 

いやいやいや、待って。

これ、もしかしてダブルクォーテーションのが速くなるっていう結果になるんじゃないか?

もう少し、はっきりとした処理速度の差が出てほしいので、テストデータ量を倍にして、さらに5万件のテストデータをinsertします。

 

10回連続で取得した場合の結果が、繰り上げられてしまい

非常にわかりにくいものとなってしまったため、1度の取得速度を載せていきます。

(ちなみにP1は、1.8分、P2は1.7分でした)

 

 

 

四回目の測定結果

パターン1 シングルクォーテーション

6.74秒

6.33秒

6.54秒

 

パターン2 ダブルクォーテーション

6.20秒

6.20秒

6.26秒

 

なんとダブルクォーテーションの方がパフォーマンスが良いという結果になってしまいました。

これは、環境の問題なのでしょうか。

 

結果

MySQLクエリはダブルクォーテーションで囲おう!

 

コメントを残す

CAPTCHA