私はMySQLデータベースにバックエンドされている私たちのrsyslogサーバーを監視するNagiosプラグインに取り組んでいます。このプラグインは、一意の文字列を生成してsyslogに送信し、MySQL DBに一意の文字列を問い合わせることで動作し、サービスがメッセージを正しく受信して格納していることを証明します。MySQLのLongTextフィールドで文字列を検索する「正しい」方法はありますか?
この表は、意外なことに、(350万行〜2.1GBのディスク)、InnoDB形式です。 syslogメッセージを保持する列の型はLONGTEXTです。
私は現在、それがフォームの照会送信しています。この場合check_rsyslogdb_1328869942
には、プラグインによって記録された一意の文字列である
SELECT count(*) FROM allremote WHERE message LIKE '%check_rsyslogdb_1328869942%';
。
私はこのクエリにもっと効率的な方法がありますか?
私はFULLTEXTインデックスを調べましたが、それらはMyISAMのみであり、ポリシーとして、明らかにMyISAMを避けるようにしています。
http://stackoverflow.com/questions/1381186/fulltext-search-with-innodb –
「選択1から...... ......制限1」は少し助けになります。一致する行をすべて数える代わりに、1つの一致が見つかったら1を返します。結果が戻ってこない場合は、結果が見つかりません。 – diolemo
一意のID(auto_increment)を持っていた場合は、最後にチェックしてから行をチェックするだけです。したがって、最後にID 5000があった場合は、チェックを実行するだけで、文字列一致条件の前にID> 5000を保証する条件を設定します。 – diolemo