mysql替代like模糊查询的最佳方法?????求赐教!!!!

php中文网
发布: 2016-06-23 14:16:48
原创
1882人浏览过

MySQL 模糊查询 最佳 索引

最近做一个项目,商品分类的属性,有30多个属性值,编辑的时候,是把所选属性的int值整合成一个字符串,写进数据库。。这样前台查询的时候,选择属性,和数据库的属性字符串进行匹配。。。
这应该是mysql常用而且比较恼火的问题,很久之前遇到过,因为相对查询不多,所以没有深入研究,最近这个项目这方面的搜索量非常大。。所以上来求大神赐教。。
网上多数人说用 match against全文索引方法,肯定比like查询快,但这种是不是效率最高的???

回复讨论(解决方案)

全文检索肯定比like查询快
但 mysql 的全文检索并不支持中文,需要安装第三方软件

你把 所选属性的int值整合成一个字符串 ,那么你是如何能查询的到的?

前台传入的属性选项整合成字符串,然后与数据表里的属性字符串进行匹配。。刚才想了下也不行,如果顺序不对,匹配就会失败。。。
全文检索肯定比like查询快
但 mysql 的全文检索并不支持中文,需要安装第三方软件

你把 所选属性的int值整合成一个字符串 ,那么你是如何能查询的到的?

属性筛选还有什么好的思路呢???

结合 find_in_set 和 substring_index 两个函数就可以了
当然属性串样组织成这样:
属性1,值1,属性2,值2,属性3,值3,属性4,值4,属性5,值5,.....

这2个函数的效率怎么样啊,除了这2个函数,额外还有其他5-8个查询条件。。上万条记录,cpu撑得住吗???
结合 find_in_set 和 substring_index 两个函数就可以了
当然属性串样组织成这样:
属性1,值1,属性2,值2,属性3,值3,属性4,值4,属性5,值5,.....

先不要奢谈效率,结果还没有出来呢,哪来的效率?

你先在 mysql 管理器中执行下面的查询,体会一下函数的用法

select substring_index(substring_index(n,',',find_in_set('属性2', n)),',',-1)from (select '属性1,值1,属性2,值2,属性3,值3,属性4,值4,属性5,值5' as n) t
登录后复制

分表....

其实象这种需求应考虑按位与方式写值,而不应合成字符串写入
1:属性1
2:属性2
4:属性3
8:属性4
......
属性1+属性3=>1+4=5 ,数据库写入整型值5

(5&1)== 1 -->包含属性1
数据库操作也差不多:where (options & 1)=1

其实象这种需求应考虑按位与方式写值,而不应合成字符串写入
1:属性1
2:属性2
4:属性3
8:属性4
......
属性1+属性3=>1+4=5 ,数据库写入整型值5

(5&1)== 1 -->包含属性1
数据库操作也差不多:where (options & 1)=1
不是很明白 能说的再详细点吗

能举个更详细的例子吗??类似排列组合的算法??
其实象这种需求应考虑按位与方式写值,而不应合成字符串写入
1:属性1
2:属性2
4:属性3
8:属性4
......
属性1+属性3=>1+4=5 ,数据库写入整型值5

(5&1)== 1 -->包含属性1
数据库操作也差不多:where (options & 1)=1

这个例子已经够详细了,楼主去多了解整数间的按位与运算,其实也就是二进制数的与运算

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号