ブログって書くときはやたら書いてしまうんですよね。私だけかな?(笑)

 記事にしようかどうしようか迷ったのですが、やっぱり自分のメモ代わりも含めて明記しておくことにしました。何かというとPHPの開発者が間違えるMySQLトップ10です。わかっているようでわかっていない。初心を忘れるべからず。じゃないですが、読んでおいて損はない内容なので下記に明記しておきます。

 また、MySQLのストレージ・エンジンMyISAMInnoDBについてもちょっと調べたので明記しておきます。

PHPの開発者が間違えるMySQLトップ10

 まず、PHPの開発者が間違えるMySQLトップ10ですが、下記リンクにその内容が紹介されています。

Top 10 MySQL Mistakes Made By PHP Developers

見ての通り、全部英語なのですが、下記にその翻訳を自分なりの言葉で簡単に明記しました。

  1. MyISAMよりInnoDBを使いましょう
    MyISAMはデフォルトで設定されていますが、外部キー制限やトランザクションなどをサポートしていません。更にレコードの挿入、更新のたびにロックされるのでパフォーマンスに悪影響が発生します。InnoDBを使用しましょう。
  2. PHPのMySQL関数を使ってしまう
    mysql_○○○関数を使用するとSQLインジェクション攻撃への対処になったりする。また、データベースが変わったときの対応が厄介なのでPDOを使用しましょう。
  3. ユーザー入力値をそのままSQLに使用している
    ユーザーが入力した値をそのままSQLに入れて実行するのはSQLインジェクションなどを実行される可能性もあるので、サーバー側でチェックして使用しましょう。下記のような使い方はNGです。

    $username = $_POST["name"];
    $password = $_POST["password"];
    $sql = "SELECT userid FROM usertable WHERE username='$username' AND password='$password';";
    
  4. UTF-8を使っていない
  5. SQL(データベース側)で処理できることをPHP側で処理している
    よくやりがちなことですが、SELECTなどでデータを取得する際、数などはSQLのCOUNTで取得できます。PHPのループ処理などでは効率が悪いです。
  6. クエリを最適化していない
    パフォーマンスの問題の多くは最適化されていないSQLのせいでパフォーマンスが落ちている。MySQLのexplainQuery Profilerを使ってクエリを最適化しましょう。(PHPSPOT開発によるとJet Profilerで視覚的にプロファイリングが可能とのこと)
  7. 間違ったデータ型を使用してる
    日付にはDataやDateTimeを使用し、varcharなどは使用しない。
  8. SELECTクエリで*を使用しない
    何でもデータを持ってきてしまうのでパフォーマンスが悪くなります。
  9. 必要以上のインデックスを設定しない
    インデックスを設定すればSELECTは早くなるがINSERTやUPDATEは遅くなります。ほどほどに。
  10. バックアップを忘れない

ストレージ・エンジンについて

 上記の内容で1.MyISAMよりInnoDBを使いましょうとあります。このMyISAMとInnoDBとは何じゃ?という人もいるでしょう。自分もどちらかというとその部類なのですが、ちょっと調べてみたところ、簡単に書くと下記のようになるようです。

  特徴 欠点
MyISAM
  • デフォルトのテーブルタイプ
  • シンプル
  • 高速に動作
  • フルテキスト検索に対応
  • トランザクションや外部キー制約をサポートしない
  • REPAIR TABLEで修正できることが多いがクラッシュ時に使えなくなる
  • テーブルレベルでロックをかけるという点でロックの粒度が荒い
InnoDB
  • トランザクションをサポート
  • 外部キー制約をサポート
  • クラッシュ時のリカバリに対応
  • 列レベルでロックを実施
  • 複雑さが増す
  • フルテキスト検索ができない
  • パフォーマンスが悪い

(参照サイト:MySQL、MyISAMとInnoDBを選ぶ方法 | マイコミジャーナル)

エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド

著者/訳者:奥野 幹也

出版社:技術評論社( 2010-06-12 )

定価:

Amazon価格:¥ 3,200

大型本 ( 520 ページ )

ISBN-10 : 4774142948

ISBN-13 : 9784774142944