ngram mysql_N-gram解决Mysql单表千万级数据检索

问题

当单表数据达到千万级时,用like数据检索速度无法满足需求

解决办法

通过索引优化可以适当加快检索速度,但是还是比较慢,N-gram是MySQL5.7.6内置全文检索插件,对MyISAM和InnoDB引擎有效。

经过简单测试,检索速度还是比较理想的,因此推荐采用N-gram!

测试环境

CPU(i5)+Mysql5.7.18

测试存储引擎:Innodb、Myisam

N-gram设置

把分词大小设置为2。要记住,分词的SIZE越大,索引的体积就越大,所以要根据自身情况来设置合适的大小。

Innodb单表千万数据测试

生成1千万条数据

数据表结构:

为了加快数据插入速度,数据插入完成后添加name为FULLTEXT字段

存储过程:

生成数据:

Innodb存储引擎插入数据比较慢,需要等较长时间!

为了检索方便,更改数据:

添加name为FULLTEXT字段

测试步骤

「%关键词%」测试

测试结果

N-gram:0.02s

like:1.7s

「%关键词」测试

测试结果

N-gram:12.22s

like:4.69s

「关键词%」测试

测试结果

N-gram:0.07s

like:3.30s

「关键词」测试

测试结果

N-gram:12.51s

like:3.59s

Myisam单表千万数据测试

生成1千万条数据

和Innodb类似,略!

测试步骤

「%关键词%」测试

「关键词」测试

总结

N-gram优势:

1.在没有索引优化下,like检索明显很慢

2.N-gram全文检索可以快速检索出数据

推荐!

N-gram缺点:

因为采用分词来检索,会把分词相关的数据也检索出来,速度会变慢,搜索的结果也不是很准确

(完)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
n-gram模型是一种用于自然语言处理的统计语言模型,用于预测一个词语在给定前文的情况下出现的概率。在R语言中,可以使用`quanteda`包来实现n-gram模型。 首先,需要安装`quanteda`包,可以使用以下命令进行安装: ```R install.packages("quanteda") ``` 安装完成后,可以使用以下代码创建n-gram模型: ```R library(quanteda) # 创建一个文本对象 text <- c("I love coding in R", "R is a powerful language") # 创建一个corpus对象 corpus <- corpus(text) # 创建一个token对象 tokens <- tokens(corpus) # 创建一个n-gram模型 ngram_model <- tokens_ngrams(tokens, n = 2) ``` 上述代码中,我们首先创建了一个文本对象`text`,然后将其转换为corpus对象`corpus`,再将corpus对象转换为token对象`tokens`。最后,使用`tokens_ngrams`函数创建了一个n-gram模型`ngram_model`,其中`n`参数指定了n-gram的大小。 创建完n-gram模型后,可以使用以下代码获取n-gram的频率信息: ```R # 获取n-gram的频率信息 ngram_freq <- textstat_frequency(ngram_model) ``` 上述代码中,我们使用`textstat_frequency`函数获取了n-gram模型中各个n-gram的频率信息。 除了获取频率信息外,还可以使用n-gram模型进行文本生成和预测。例如,可以使用以下代码生成一个新的文本: ```R # 使用n-gram模型生成新的文本 new_text <- generate(ngram_model, n = 10) ``` 上述代码中,我们使用`generate`函数根据n-gram模型生成了一个包含10个词语的新文本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值