質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.76%

  • MySQL

    5527questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

【MYSQL】【高速化】「クォート」を付けると「5倍~10倍」以上の効果があるのは真実?【負荷対策】

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 405

shimane

score 80

現在プログラムの勉強をしている者です。

勉強目的で運用していたサイトが重くなってしまいましたので
MYSQLの処理で重くなっている部分を見直したり、ネットで高速化についての勉強をしていまして

一番良いのは処理の時間が長くなってしまう「like %%」を全文検索で
InnoDB のフルテキストインデックスを利用していく事なのですが
初心者には手順をの説明を読んでみても難しすぎたので
もっと手軽に出来る部分を探していた所、

とあるサイト様にて

クォートを入れたか入れないかだけの差ですが、これで5倍も10倍もパフォーマンスが違うのですから入れるべきです。
入れていない場合に、これは文章の切れ具合と、前後の文言を見ながらコンピュータ側で、これはフィールド名、これは検索語と判断しながら分けています。
バッククォートとクォートを入れることで、システム側の名前、入力した側の名前と分けることで処理が簡易化されるのです。

とありました。

参考サイト様:
パフォーマンス1000%UP!PHPでMySQLのDB処理を行うと重いときに行うパフォーマンス施策~基礎編~

これなら初心者の私にも出来ると思い早速試してみました。

【現状】
サーバの種類: MySQL
サーバのバージョン: 5.6.38 - MySQL Community Server (GPL)
PHP のバージョン: 5.6.31
phpMyAdmin
バージョン情報: 4.7.4

データ件数:約20万件

//シングルクォートが無い場合
mysql> select * from bbs where title LIKE '%悲報%' order by date_format( created, '%Y-%m-%d %H:%i' ) desc, ikioi desc;

//実行結果
1回目:4256 rows in set (0.24 sec)
2回目:4256 rows in set (0.24 sec)
3回目:4256 rows in set (0.21 sec)
4回目:4256 rows in set (0.23 sec)
5回目:4256 rows in set (0.21 sec)
//シングルクォートがある場合
mysql> select * from `bbs` where `title` LIKE '%悲報%' order by date_format( `created`, '%Y-%m-%d %H:%i' ) desc, `ikioi` desc;

//実行結果
1回目:4256 rows in set (0.23 sec)
2回目:4256 rows in set (0.24 sec)
3回目:4256 rows in set (0.24 sec)
4回目:4256 rows in set (0.27 sec)
5回目:4256 rows in set (0.24 sec)


シングルクォートがある場合と無い場合を比較した結果、
「5倍~10倍」早くなるどころか、「シングルクォートがない場合」の方が平均的に早いような
安定しているような結果になりました。

さらに

次によくあるケースが*(アスタリスク)で全フィールドをよびだしているから重いというケースです。
プログラム内でテーブルを呼び出し出力するときに思わず楽なので
【*】アスタリスクで全フィールドを呼び出してしまいます。
レコード数が万を超えてくるあたりからパフォーマンスに差が出てきます。

このようにありましたが同じく試してみた所
「シングルクォート」の時と同じで
【*】を使った時と「カラム指定」の時での処理の速度が同じか
若干【*】を使った時の方が早いという結果になりました。

これは私の環境に問題があり、
皆様の環境では正常に5倍~10倍近くの処理速度の向上が実感されているのでしょうか?

それともMySQL5.6.38になった事で
「シングルクォート」や「*」が無い場合でも処理速度が向上して
使っても使わなくてもどちらでも速度的には変わらなくなったのでしょうか?

プログラム関係の学校や職場にも残念ながら縁が無く
MYSQLに関する質問が出来ずに困っています。
お力をお貸し頂けると嬉しいです。

どうかよろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+4

  1. 列名のシングルクオートについて
    SQLのパース処理に掛かる時間は、実行時間に比べればほとんど無視できるので、パース結果が同じなら全体の処理時間はほとんど変わらないでしょう。
  2. SELECTでの*(アスタリスク)について
    オプティマイザが適当な列を使用する様に最適化してくれますので検索時間にはあまり影響はないでしょう。しかし、検索結果を取得するときに不要な列が含まれていると当然その分遅くなります。
    参考サイトではCOUNT(*)にもふれていますが、COUNT(列名)ではnullがカウントされないため注意が必要です。この場合、オプティマイザはCOUNT(適当なキー列)に読み替えてくれますので、下手に列名を指定するより速くなることもあります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/20 23:27

    回答有難うございます。
    とても詳しく説明して頂けたので理解する事が出来ました。

    これからも勉強頑張っていこうと思います。

    回答して頂いて、本当に有難うございました。
    大感謝です!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • MySQL

    5527questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • トップ
  • MySQLに関する質問
  • 【MYSQL】【高速化】「クォート」を付けると「5倍~10倍」以上の効果があるのは真実?【負荷対策】