我正在研究Nagios插件来监控我们的rsyslog服务器,后者已经后端存入MySQL数据库。该插件通过生成唯一字符串,将其发送到syslog,然后查询MySQL DB以获取唯一字符串来进行操作,从而证明该服务正确接收和存储消息。
不出所料,这个表很大(大约350万行,磁盘上2.1GB),以及InnoDB格式。保存syslog消息的列的类型为LONGTEXT。
我目前正在发送以下表单的查询:
SELECT count(*) FROM allremote WHERE message LIKE '%check_rsyslogdb_1328869942%';
在这种情况下,check_rsyslogdb_1328869942
是插件记录的唯一字符串。
我是否有更有效的方法来处理此查询?
我查看了FULLTEXT索引,但它们只是MyISAM,作为一项策略我们避免使用MyISAM,因为它显然是次等的。
答案 0 :(得分:0)
事实证明,因为我使用MySQL 5. *我不需要使用LONGTEXT,我可以使用VARCHAR(2048)代替。这让我可以创建一个普通的索引,因为我知道确切的消息,只要我在末尾添加一个额外的尾随空格(不确定它来自哪里),我就可以不使用%s。