mysql 全文检索问题

xjwchy 2013-11-07 01:47:51
CREATE TABLE `test` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL,
`sex` varchar(255) character set utf8 collate utf8_unicode_ci default NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `index_name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
mysql 最小分词长度才有默认为4.
我创建上面的表,并加了全文索引。
然后插入数据(1000万条)
1.其中有250万条 name 为 “beijing shanghai guangzhou shenzhen suzhou xiaomen qingdao jinan”;
然后用 select count(*) from test match(name) against("beijing" in boolean mode)去查询,时间超不多要40多秒,而我直接用like进行模糊查询 也只要 15左右;
2.插入几条 name为 “wulumuqi huhehaote”的数据,也用类似上面的查询语句,使用全文检索的 不到1秒,只有 0.0几秒,like还是维持在 15秒左右。
从上面测试来看,是不是可以认为 如果全文检索的字段 重复率比较高的话,查询速度不及like。
请问高人,是不是我哪里设置错误,或者使用错误,为什么全文检索没有发挥相应的优势呢?
...全文
141 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rotel-刘志东 2014-01-25
  • 打赏
  • 举报
回复
如果全文检索的字段 重复率比较高的话,查询速度不及like的。
xjwchy 2013-11-07
  • 打赏
  • 举报
回复
版主,确实是确实 能给解答一下吗?
rucypli 2013-11-07
  • 打赏
  • 举报
回复
确实 mysql> select count(*) from test where match(name) against("beijing" in boolean mode); +----------+ | count(*) | +----------+ | 262144 | +----------+ 1 row in set (7.17 sec) mysql> select count(*) from test where name like '%beijing%'; +----------+ | count(*) | +----------+ | 262144 | +----------+ 1 row in set (0.25 sec) mysql> select count(*) from test where name like '%beijing%'; +----------+ | count(*) | +----------+ | 262144 | +----------+ 1 row in set (0.25 sec) mysql> select count(*) from test where match(name) against("baaaei" in boolean mode); +----------+ | count(*) | +----------+ | 0 | +----------+ 1 row in set (0.00 sec)

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧