如何优化像12306用的Like '%...%'的查询
最近爆的12306用的Like '%...%'存在性能问题,有人甚至说是低级的编程,我有点不太明白,如果实在是需要模糊搜索某些数据,不用Like,可以使用些什么方式对查询进行优化呢?
------解决方案--------------------全局索引搜索。
------解决方案--------------------
关系型数据的搜索都很弱的,现在有希望有越来越只能的搜索,它们
是根本满足不了的。
一般的搜索都会用其它的类似搜索引擎的东西去做
这类东西实时的读取数据库生成索引文件,然后根据你的搜索条件分词
然后去搜索。
我知道的有一个solr
------解决方案--------------------全文本索引能使么?
------解决方案--------------------
什么掉了?
有关数据库全文索引的 http://msdn.microsoft.com/zh-cn/library/cc879299(v=sql.105).aspx
但是这还是和第三方做的那种搜索不能比的。
特别是电子商务的网站,分类信息的网站,直接去数据库搜会搞死人的
------解决方案--------------------从错误信息来看,貌似没有很好的避免SQL注入。
------解决方案--------------------我帮你顶上去,不客气。
------解决方案--------------------最近这个很火
------解决方案--------------------真要做好12306的网站,可能需要用nosql来做数据库了
------解决方案--------------------实际上,当客户需要一个模糊查询的时候,这个问题就可以转换为关键字的查询,
于是就有很多简单的算法可以产生牛逼的效果
------解决方案--------------------我的理解是用like %~%;其实是模糊匹配,也就是像‘%黄%’,就是一个存在有黄字的都搜索,搜索全部可能,就是有100条记录,要搜索300次,而用‘黄‘就搜索100次,就是模糊匹配搜的次数太多,效率太低,如果用在一个大型数据库,假设有1亿条记录,就要搜索3亿次,那么有时会把系统都瘫了
------解决方案--------------------模糊查询还是必要的,就看你怎么处理这个模糊查询,在什么级别上查询了。
比如例图中,车种类型,这里应该允许模糊查询,车种类型应该是一个信息表,里面的数据应该不是很多。如果使用模糊查询,列出所有带有"黄"的车型,然后,选取这个车型,再在大表中进行精确查找就行。
------解决方案--------------------其实那么大的费用,外包给百度谷歌做得更好。%黄%这种搜索方法,那就够狠了,还会出现大量没有意义的数据。真想见一下那些程序员。