mysql查询方式疑问

现有数据表T里面的字段“A”,A的值通常为:“12,123,312,1212” 形式。T中已有数据10W条。

需要查询出A中含有单独"12"的记录~

比如:
"123,125,1212,1234,312" 不含有单独的一个"12" 不要
"1,18,123,1212,321,312" 不含有单独的一个"12" 不要
"1,12,123,1212,321,312" 含有单独的一个"12" 要
...

我有2种查询方法,感觉有点繁琐~ 一个是CONCAT,一个是LIKE OR

问问大家有没有更高效的方法,拜谢~

阅读 2.4k
3 个回答

Mysql函数find_in_set。

可以考虑给字段A添加全文索引,使用进行全文检索:

ALTER TABLE `T` ADD FULLTEXT (`A`);

SELECT `id` FROM `T` 
WHERE MATCH(`A`) AGAINST('12' IN BOOLEAN MODE) 
ORDER BY `id` DESC LIMIT 10 OFFSET 0;

需要注意的是:
MySQL5.6.4的 innodb_ft_min_token_size 的默认值为3.
MyISAM的 ft_min_word_len 的默认值为4.
如果你要索引的最小长度是2,那就要在my.cnf配置:
innodb_ft_min_token_size=2
ft_min_word_len=2

既然MySQL本身内置的API都用了,那我建议直接全表扫描,把读取出来的数据用循环加判断处理。。。考虑到性能,你不妨直接用条件查询,限制查询的条数,然后慢慢的处理这些数据,虽然要花费一些时间,但数据库不会有很大的压力

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题