2011-01-14 12 views
0

これは非常に広い質問ですが、ここに私の状況です: 1)15分ごとにMySQL(innoDB)にダンプするハイバネート対応のJavaプログラムがあります。それ自身のログデータは多湿です(ログの100k〜500k行)。MySQLクエリの最適化---あなたの考え

2)現在、フロントエンドには、タイムスタンプに基づいて検索とレポートの2つの機能が提供されています。

3)クエリは、私はインデックスをつけたにも関わらず戻って結果を得るためにlooong時間(10-15分)をとり、勉強するEXPLAINたところ、MySQLサーバではその撮影時間など

4)レベルでは、私は他のものの中でクエリキャッシュを増やしました。

私はこの問題を解決するために私の膝に下っています。私は、クエリ速度を上げるためにできることが何であるかを知る必要があります。

ありがとうございます。 Bo

+0

私はフロントエンドでhibernateを使用して結果を表示しません。これは、フロントエンドを処理するPERLでラップされたまっすぐなSQLクエリです。 – BoCode

+1

巨大なログデータは、データベースではなくファイルとして保存する必要がありますか? – ajreal

+1

15分ごとに1つのテーブルに100k〜500kの行を追加していますか?表定義または定義、使用する照会、およびおそらくExplain出力を追加します。役に立つ回答を得る機会を改善する必要があります。 Perlが結果を処理するのを見るのに役立つかもしれません。 –

答えて

0

mysqlと組み合わせてフルテキスト検索エンジンを使用します。

たとえば、スフィンクス。すべての挿入サイクルの後、スフィンクスはキャッシュを更新します。 あなたは結果を得るためにsphinxse(mysqlのストレージエンジンとしてsphinxを使います)を使うことができます。 http://www.howtoforge.com/sphinx-as-mysql-storage-engine-sphinxse

また、500000インサートの場合、10分から15分の時間がかかるようです。 MyISAMをログテーブル用のストレージエンジンとして使用し、INSERTの代わりにINSERT DELAYEDを使用する必要があります(hybernateで実現する方法がわかりません)。