スポンサーサイト

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に問い合わせ投げるより早い!というのが意外でした。
      (くだらなくてすみません;;)

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




      1

      PR

      calendar

      S M T W T F S
         1234
      567891011
      12131415161718
      19202122232425
      2627282930  
      << April 2009 >>

      twitter

      selected entries

      categories

      archives

      recent comment

      • djangoテンプレート上でmodelのメソッドに引数を渡す方法(djangoで出勤簿アプリ試作中♪)
        GavannITサービス-なりとみ
      • 私がそれでも名古屋市に住み続ける理由を6つにまとめてみた!
        bose wireless speaker
      • FastCGIでdjango…400エラー???
        levi's
      • さくらインターネットdjangoが突然500エラー!?(Pythonバージョンアップされてた
        salomon running shoes
      • 私がそれでも名古屋市に住み続ける理由を6つにまとめてみた!
        louboutin shoes
      • FastCGIでdjango…400エラー???
        yeezy boost 350
      • さくらインターネットdjangoが突然500エラー!?(Pythonバージョンアップされてた
        jordan 11
      • Silexでエラーページをカスタマイズする方法 : Symfony Advent Calendar 2011 - day 12
        pandora jewelry
      • django対symfony 日本語メール送信(その1 symfony編)
        nike air vapormax
      • 解決!XREAでCGI版Pythonを使ってdjangoを動かす(人柱?)
        kate spade

      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