- 締切済み
MySQLにおける検索速度について
はじめまして。 GOOと同じWeb上における質問&回答システムのようなものを作っております。 サーバ構成は、 CPU:2.4GM MEMORY:1GM OS:RedHat7.2 WWWサーバ:Apache1.3x DB:MySQL3.23 インターフェースにはPHP4.2を使用しております。 テーブル構成は、基本的に、 [質問テーブル] 質問No.(PK) 質問タイトル 質問内容 [回答テーブル] 回答No.(PK) 質問No.(FK) 回答内容 のようにしております。 検索の方法は、 該当件数は、select count(質問No.) from 質問テーブル で取得し、 一覧は、select * from 質問テーブル limit a,b order by 質問日時; のようにlimitを使用して表示する件数だけ取得しています。 現在ダミーデータを使用してテストしています。 同時アクセスのないローカルで単体でテストしています。 1万件をこえるあたりから急に検索のときにつっかかるくらいの遅滞が発生し、 3万件からそれが顕著になり、 30万件では2秒くらいかかります。 これはしょうがないのでしょうか。 「教えてGOO」等はすぐ検索されますが、どのようになっているのでしょうか? 検索の早いMySQLとはいえフリーだからしょうがないのでしょうか。 MySQLはデフォルトの設定のままです。 (MySQL使用するメモリ等を多少いじってみたのですがあまり変化がありませんでした) 個人的には、あとは、MySQLの適切なパラメータ設定、テーブル設計あたりだと思っているのですが、経験不足でこれだというものが思いつきません 宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Goody-goody
- ベストアンサー率33% (4/12)
- nightowl
- ベストアンサー率44% (490/1101)
補足
有難う御座います。 インデックスは、質問番号、分類番号、質問日時につけています。 該当総数を取得するSQL文 select count(*) as allhit from 質問テーブル where XXX. がヒット件数によって速度にとても影響しているようです。例えば、30万件のうち6000件ヒットは心地よくでてきますが、30万件のうち5万件ヒットになると実用性としては遅い感じがします。 遅滞の一番の原因が ・ヒット数が多い問題 ・総データ数が多い問題 どちらが問題で、どう関係しているのかイマイチよく把握できていません。 あとはハード面の調整になるのでしょうか・・・ また、30万件のデータの中でヒットが20万件になると、上記のようなSQL文が遅くなってしまうのはどのデータベースでも同じなのでしょうか? 個人的にはヒット数が30万件くらいまではなんとか即表示出来たらなと思っております。 何かご意見ありましたら宜しくお願い致します。