NP_cles()

123456789101112131415161718192021222324252627282930

NP_Trackbackは重い?

 
投稿者:hsur 投稿日時:2006-02-02 - 22:32
カテゴリー:Nucleus Tips - / - トラックバック(default)- Views: 209

NP_Trackbackが重いといわれてしまったので、トラックバックが格納されているplugin_tbテーブルをちょっと調べてみたら、驚くべきことにまったくインデックスが張られていませんでした

例えば、トップページなんかでTrackBack(nn)のようにエントリごとにトラックバックの件数表示なんかをやってしまったりすると、この数字一つ一つを計算するためにMySQLは一回一回テーブルをフルスキャンをするというなんとも恐ろしい状況になっていたわけです。これはトラックバックをたくさん抱えている人にとっては大変なサーバの負荷になります。

ということでインデックスを張るには

おそらく単にインデックスを張ればすむ問題だと思うので、コンソールやphpMyAdminを通じてSQLが直に打てる場合には以下のクエリを実行することでこの状況を回避することができます。

インデックス作成SQL

ALTER TABLE `nucleus_plugin_tb` ADD INDEX `tb_id_block_timestamp_idx` ( `tb_id`, `block`, `timestamp` DESC );

SQLを打つのが面倒な場合には、プラグインのバージョンアップで

これだけではあまりにも不親切なので、SQLが直に打てない人のためにフォーラムやうちのサイトで公開中のNP_Trackbackをバージョンアップしておきました。ファイル上書きの後、プラグインを一旦アンインストールし、再度インストールすることでインデックスの生成が行われるようになっています。NP_Trackback 2.01jpを使っている方にはバージョンアップを強くお勧めします。

Indexを追加した結果

実践ハイパフォーマンスMySQL

比較するまでもないですがインデックスの追加の前後で、MySQLの動きがどう変化したかについては下記のとおりです。読める人には一目瞭然ですが、テーブルの検索方法ががフルスキャンから、ちゃんとインデックスを使ったスキャンに変化しているのがお分かりいただけるかと思います。

詳しい読み方については「MySQL 4.1 リファレンスマニュアル :: 5.2.1 EXPLAIN 構文(SELECT に関する情報の取得)」、もしくは「実践ハイパフォーマンスMySQL」の4章、5章あたりが参考になると思います。

Index追加前

mysql> explain select count(*) FROM nucleus_plugin_tb WHERE tb_id = 443 and block = 0 order by timestamp desc ; +----+-------------+-------------------+------+---------------+------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------------------+------+---------------+------+---------+------+------+-------------+ | 1 | SIMPLE | nucleus_plugin_tb | ALL | NULL | NULL | NULL | NULL | 935 | Using where | +----+-------------+-------------------+------+---------------+------+---------+------+------+-------------+ 1 row in set (0.00 sec)

Index追加後

mysql> explain select count(*) FROM nucleus_plugin_tb WHERE tb_id = 443 and block = 0 order by timestamp desc ; +----+-------------+-------------------+------+-----------------------+-----------------------+---------+-------------+------+--------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------------------+------+-----------------------+-----------------------+---------+-------------+------+--------------------------+ | 1 | SIMPLE | nucleus_plugin_tb | ref | tb_id_block_timestamp | tb_id_block_timestamp | 5 | const,const | 352 | Using where; Using index | +----+-------------+-------------------+------+-----------------------+-----------------------+---------+-------------+------+--------------------------+ 1 row in set (0.00 sec)

    このエントリは役に立ちましたか?

      

    トラックバックについて [policy]

    Trackback URL:
    Trackbacks
     半月悩まされたトラックバック機能のアップグレードでしたが((これまでの経緯については関連記事一覧を参照。))、hsur さんの修正版を導入したところ、今度こそ復活いたしました\(^o^)/
    ひろの日記帳@International Cafeteria (2006/02/03 12:12)

    Comments [policy]

    No comments yet

    Add Comments

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン