项目中有个日志表需,需求要对日志内容做模糊匹配,但是考虑到数据量会比较大,用like性能不高。查了一下可以用MYSQL自带的全文检索,并且小测试了一下。
创建全文检索字段,只有char、varchar、text、longtext才支持:
CREATE FULLTEXT INDEX annotation_index ON sys_quartz_log (annotation) WITH PARSER ngram;
其中 annotation 是字段名,sys_quartz_log 是表名。
查询的话我用的默认自然语言方式:
SELECT * FROM sys_quartz_log WHERE MATCH (annotation) AGAINST ('执行语句');
BOOLEAN模式,使用操作符,可以支持指定关键词必须出现或者必须不能出现或者关键词的权重高还是低等复杂查询:
SELECT * FROM sys_quartz_log WHERE MATCH (annotation) AGAINST ('执行语句' IN NATURAL LANGUAGE MODE);
测试使用like,执行时间0.065s:
使用全文检索执行时间,0.027s。
测试针对我目前的数据量而言,大概只有两三千数据,如果数据量更大,体现应该更明显。
标签:quartz,log,sys,全文检索,数据量,MYSQL,annotation From: https://www.cnblogs.com/rolayblog/p/16941222.html