语句1:select * from table where key like '%search%'语句2:select * from table where key like 'search%'执行语句1的时候是全字段搜索,而执行语句2的时候是按照索引key来搜索哪位高手能告诉究竟是怎么回事?怎么才能解决????????????
给你一个比较弱的实现方法,不过没有测试过,也会有一定的代价,哈哈!将你的那个字段保存两份,一份正向,令一份反向,这样两个一起 前向匹配就可以找到了,哈哈!比如: fielda, fieldb, fieldc 其中fieldb 是你要找的 select * from tbl where fieldb like "%search%";现在添加一个字段 fieldd, fieldd = fieldb 的字符串反转一下。那么就可以用select * from tbl where fieldb like "search%" and fieldd like 'hcraes%' ; 这样来查找了。 效率方面没有测试过,不过如果你有兴趣,可以测试下。 哈哈! 如果那个人测试过了,不妨将结果公布一下,让大家了解下是否可行。谢谢!
而对like '%fld_value%'进行全表扫描。其实这样的查询方案完成可以想像出来,对
like 'fld_value%'可以利用索引进行快速定位,而对like '%fld_value%'则只能通过
全表扫描来确定符合条件的数据。所以我们可以在基于Oracle索引规则的基础上进一步
理解这两种方式的查询计划为什么不同。
'%XXXX%'就只有全检索这一条路了
加快速度的办法,我想除建立索引外,还可以考虑建立分区表、建立分区索引等。
以上是个人之拙见
'%XXXX%'就只有全检索这一条路了
2.确保最优的 JOIN 操作:有些查询使用 NESTED LOOP join 快一些,有些则是 HASH join 快一些,另外一些则是 sort-merge join 更快。
为什么不能够使用'search%'
fielda, fieldb, fieldc 其中fieldb 是你要找的
select * from tbl where fieldb like "%search%";现在添加一个字段 fieldd, fieldd = fieldb 的字符串反转一下。那么就可以用select * from tbl where fieldb like "search%" and fieldd like 'hcraes%' ;
这样来查找了。
效率方面没有测试过,不过如果你有兴趣,可以测试下。 哈哈!
如果那个人测试过了,不妨将结果公布一下,让大家了解下是否可行。谢谢!