请评价一下几种模糊查询的效率?或者有无替代办法?

[复制链接]
查看11 | 回复6 | 2011-1-4 10:26:11 | 显示全部楼层 |阅读模式
name 是个枚举型字段,大约包括 sybsc1, sybsc2 ,sybsc3, bsc3, ssbsc13等,要想选出sybsc开头的记录并与其它表联结(整个查询很大)
请估计以下哪种模糊查询的效率会稍高点(我不知道各字段的索引情况,也没有权限建立索引) 。有没有更好的办法?
1. name like 'sybsc%'
2.name like 'sybsc1' or name like 'sybsc2' or name like 'sybsc3'
3.regexp_like(name,'^sybsc')
4.instr(name,'sybsc')>0
5.substr(name,length(name),-5)='sybsc'
6.
.......
name='sybsc1'
union all
.......
name='sybsc2'
回复

使用道具 举报

千问 | 2011-1-4 10:26:11 | 显示全部楼层
常规写法,第1种,不要把问题复杂话,一般要建立个索引的
回复

使用道具 举报

千问 | 2011-1-4 10:26:11 | 显示全部楼层
如果知道精确个数,用name IN ('sybsc1','sybsc2','sybsc3')
回复

使用道具 举报

千问 | 2011-1-4 10:26:11 | 显示全部楼层
已经试过,方法1与2差不多,但方法6慢了10倍.
其它的待比
回复

使用道具 举报

千问 | 2011-1-4 10:26:11 | 显示全部楼层
方法6当然慢了
回复

使用道具 举报

千问 | 2011-1-4 10:26:11 | 显示全部楼层
嘿嘿
in和exist 需要琢磨下
6肯定性能超低的
回复

使用道具 举报

千问 | 2011-1-4 10:26:11 | 显示全部楼层
1,2,如果建立了索引都可以,但是过滤条件个数能够确定,那用第二种
3,正则就算了,虽然没有测试过
4,5,除非建立了函数索引
6,对表进行了N遍的访问
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行