スポンサーサイト

0

    一定期間更新がないため広告を表示しています


    • 2014.12.23 Tuesday
    • -
    • -
    • -
    • -
    • -
    • by スポンサードリンク

    MySQL⇔PHPベンチマーク(mysql_・PDO・mysqli)+おまけ

    0
      ご無沙汰です。
      ちょっと思いつきでやってみました。


      create table testtable
      (
        code varchar(10),
        name varchar(10),
        PRIMARY(code)
      )

      | code | name |
      |00001|hoge  |
      |    …          |
      |10000|hoge  |
      というテスト用のデータを用意。

      SQLは
       select name from testtable where code='09999'
      PRIMARYとしてINDEXされているcodeカラムを対象に、1万件のデータを検索してたった1行×1カラムのデータを探します。

      (一般的なベンチの手法とはかなり違うと思いますが)
      DB接続の時間は含まずSQLを実行して、結果をフェッチして、その結果をvar_dumpするところまでの時間を計りました。
      私の場合、WEBアプリでの利用が目的であって、実際にデータを取り出して使い回せる状態にするところまでDBアクセス層のお仕事だと思っているので。

      また、自鯖ですがコマンドラインでなくApacheモジュール版PHPをブラウザから呼んで実行させています。
      数字はPHPのmicrotime関数の出力を処理したもの。10回やった平均です。
      PHP全体・鯖全体の負荷の問題もあるので数値としては全然正確じゃないと思いますが、一応の速度比較にはなるかと。
      ■結果
      mysql関数:73.44マイクロ秒
      PDO:113.49マイクロ秒
      mysqli(クラス):51.28マイクロ秒
      ???:28.08マイクロ秒 ←



      「???」って何だと思います?
      実は、codeをキーに、nameを値に持つ連想配列を作って、$array['09999']が存在するかどうか調べて(isset)、存在すれば返す。という古典的な(?)方法のベンチです。
      1万件の配列をメモリに読み込む方が、DBに問い合わせ投げるより早い!というのが意外でした。
      (くだらなくてすみません;;)

      今回扱いたいモノが、更新頻度があまり高くなく、読み込み頻度が圧倒的に高いデータなもので、こんな比較をしてみました。
      更新のほうの処理を書くのがちと面倒ですが、配列ベースで実装しようかな、という結論に至りました。




      スポンサーサイト

      0

        • 2014.12.23 Tuesday
        • -
        • 16:55
        • -
        • -
        • -
        • -
        • by スポンサードリンク

        コメント
        コメントする








           
        この記事のトラックバックURL
        トラックバック

        PR

        calendar

        S M T W T F S
             12
        3456789
        10111213141516
        17181920212223
        24252627282930
        << September 2017 >>

        twitter

        selected entries

        categories

        archives

        recent comment

        • 結局CodeIgniter用汎用Modelクラス&汎用CRUDスクリプトを書きました
          プログラマー
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          よし
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          ななうぇぶ
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          よし
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          よし
        • WindowsのPCで開発するphperがxhprofを使う方法
          ななうぇぶ
        • WindowsのPCで開発するphperがxhprofを使う方法
          川本
        • [バッドノウハウ]Symfony2で別テーブルの集計項目を一覧に含めたいとき
          よし
        • Symfony Advent Calendar JP 2012 day 14 - vendorをcomposerで管理しているプロジェクトにcomposerを使わずにバンドルを追加したときのautoloadの書き方
          77web
        • Symfony Advent Calendar JP 2012 day 14 - vendorをcomposerで管理しているプロジェクトにcomposerを使わずにバンドルを追加したときのautoloadの書き方
          ktz

        recent trackback

        • HTMLの表(TABLE)のセル(TD)に斜線を引くjavascriptライブラリ slash.js 作っちゃいました
          常山日記
        • django対symfony 日本語メール送信(その1 symfony編)
          CPA-LABテクニカル
        • CodeIgniterでユーザー認証
          されどLAMPな日々
        • 久々にdjangoを最新版にしたらHTMLがエスケープされちゃった!!(解決済み)
          常山日記
        • FastCGIを諦めてmod_pythonを使う。Apacheのアップグレード
          サーバー用語集
        • さくらインターネット、sqlite3でdjango@CGI版を使う際の設定メモ
          常山日記
        • さくらインターネット スタンダードプランでdjango使ってる方、DBは?
          mitszoの日記
        • python多次元リストをsort(並べ替え)する方法?
          mitszoの日記
        • フォームから送信した値とrequest.POSTの挙動($_POST@PHPとの比較)
          Humming Via Kitchen
        • 日本語テキストをtruncate@django(Python全般にも??)
          常山日記

        recommend

        links

        profile

        search this site.

        others

        mobile

        qrcode

        powered

        無料ブログ作成サービス JUGEM