- 2009/8/17 月曜日 15:14:22
- MySQL | osCommerce
osCommerceやZen Cartのバージョンによっては注文関連のテーブルにインデックスを設定するとパフォーマンスが改善される。
ただし、丁寧にすべてのカラムごとに1つのインデックスを設定すると、インデックスが効果的に機能しない。
「実践ハイパフォーマンスMySQL」の66ページに、「MySQLでは、1つのクエリを実行するとき、1つのテーブルにつき1つのインデックスしか使用できないのである」と書かれている。とすると、WHERE句で指定される検索条件に使用されるカラムが何個もある場合は、せっかく設定したインデックスが無駄になるということになる。
こんなときは、複合インデックスにすると効果的。MySQLでは、1つのインデックスに対して15カラムまで1つのインデックスに設定できる。
注文関連テーブルの場合も、クエリを確認して、検索条件中のカラムを同一のインデックスに設定するといい。
phpMyAdminなどを使って、EXPLAINで分析しながら調整するとわかりやすい。
あるとき、トップページだけ時間がかかるので調べてみたら、ベストセラー(ランキング)を表示しているモジュールの中のクエリに時間がかかっていた。「WHERE」以降にはカラムがひとつあり、「ORDER BY」以降にもカラムがひとつあって、同じテーブルに属していたのでこの二つのカラムで複合インデックスを作ったら、2秒近くかかっていた処理が0.024秒に短縮された。
詳細は以下のURLで確認してください。
http://dev.mysql.com/doc/refman/4.1/ja/mysql-indexes.html
http://dev.mysql.com/doc/refman/4.1/ja/multiple-column-indexes.html
Related posts:
- osCommerceを軽快に2 テーブル分割 注文管理関連のテーブルは、何年もサイトを運営していると何十万件というデータが保存されることになる。1つのテーブルに大量のデータが保管されると、新規データの登録時に時間がかかる。そこで、テーブルを分割するというアイデアが [...]...
- 新しい: osCommerceを軽快に2 テーブル分割
- 古い: 休止状態
コメント:0
トラックバック:0
- この記事のトラックバック URL
- http://www.ynagata.com/2009/08/17/oscommerce%e3%82%92%e8%bb%bd%e5%bf%ab%e3%81%ab%ef%bc%91%e3%80%80%e8%a4%87%e5%90%88%e3%82%a4%e3%83%b3%e3%83%87%e3%83%83%e3%82%af%e3%82%b9/trackback/
- トラックバックの送信元リスト
- osCommerceを軽快に1 複合インデックス - 永田順伸のブログ より
