日期:2014-05-17  浏览次数:20405 次

如何优化像12306用的Like '%...%'的查询
最近爆的12306用的Like '%...%'存在性能问题,有人甚至说是低级的编程,我有点不太明白,如果实在是需要模糊搜索某些数据,不用Like,可以使用些什么方式对查询进行优化呢?

------解决方案--------------------
全局索引搜索。
------解决方案--------------------
探讨

引用:
全局索引搜索。

没明白意思,可否详细说一说!谢谢了

------解决方案--------------------
全文本索引能使么?
------解决方案--------------------
探讨

阿汤哥,后面的掉了....

------解决方案--------------------
从错误信息来看,貌似没有很好的避免SQL注入。
------解决方案--------------------
我帮你顶上去,不客气。
------解决方案--------------------
最近这个很火
------解决方案--------------------
真要做好12306的网站,可能需要用nosql来做数据库了
------解决方案--------------------
实际上,当客户需要一个模糊查询的时候,这个问题就可以转换为关键字的查询,
于是就有很多简单的算法可以产生牛逼的效果


------解决方案--------------------
我的理解是用like %~%;其实是模糊匹配,也就是像‘%黄%’,就是一个存在有黄字的都搜索,搜索全部可能,就是有100条记录,要搜索300次,而用‘黄‘就搜索100次,就是模糊匹配搜的次数太多,效率太低,如果用在一个大型数据库,假设有1亿条记录,就要搜索3亿次,那么有时会把系统都瘫了
------解决方案--------------------
模糊查询还是必要的,就看你怎么处理这个模糊查询,在什么级别上查询了。

比如例图中,车种类型,这里应该允许模糊查询,车种类型应该是一个信息表,里面的数据应该不是很多。如果使用模糊查询,列出所有带有"黄"的车型,然后,选取这个车型,再在大表中进行精确查找就行。
------解决方案--------------------
其实那么大的费用,外包给百度谷歌做得更好。%黄%这种搜索方法,那就够狠了,还会出现大量没有意义的数据。真想见一下那些程序员。
------解决方案--------------------
我也有同样的疑惑。
------解决方案--------------------
关于数据库 还有很多我没接触到的东西
------解决方案--------------------
关键还是以 多行的子表 代替 “,张三,李四,王二麻子,”这样的单字段罗列

------解决方案--------------------
探讨
引用:
关键还是以 多行的子表 代替 “,张三,李四,王二麻子,”这样的单字段罗列

能否详细说一说。。。我没太明白!!谢谢了!