2012-02-10 10 views
1

私はMySQLデータベースにバックエンドされている私たちのrsyslogサーバーを監視するNagiosプラグインに取り組んでいます。このプラグインは、一意の文字列を生成してsyslogに送信し、MySQL DBに一意の文字列を問い合わせることで動作し、サービスがメッセージを正しく受信して格納していることを証明します。MySQLのLongTextフィールドで文字列を検索する「正しい」方法はありますか?

この表は、意外なことに、(350万行〜2.1GBのディスク)、InnoDB形式です。 syslogメッセージを保持する列の型はLONG​​TEXTです。

私は現在、それがフォームの照会送信しています。この場合check_rsyslogdb_1328869942には、プラグインによって記録された一意の文字列である

SELECT count(*) FROM allremote WHERE message LIKE '%check_rsyslogdb_1328869942%'; 

私はこのクエリにもっと効率的な方法がありますか?

私はFULLTEXTインデックスを調べましたが、それらはMyISAMのみであり、ポリシーとして、明らかにMyISAMを避けるようにしています。

+2

http://stackoverflow.com/questions/1381186/fulltext-search-with-innodb –

+0

「選択1から...... ......制限1」は少し助けになります。一致する行をすべて数える代わりに、1つの一致が見つかったら1を返します。結果が戻ってこない場合は、結果が見つかりません。 – diolemo

+0

一意のID(auto_increment)を持っていた場合は、最後にチェックしてから行をチェックするだけです。したがって、最後にID 5000があった場合は、チェックを実行するだけで、文字列一致条件の前にID> 5000を保証する条件を設定します。 – diolemo

答えて

0

私はMySQL 5以降を使用していることが判明しました。* LONGTEXTを使用する必要はありません。代わりにVARCHAR(2048)を使用できます。これにより、通常のインデックスを作成することができます。正確なメッセージを知っているので、末尾に余分なスペースを追加している限り、%sを残すことができます。

関連する問題