我有这样一条SQL语句
select * from  TABLE_NAME where COLUMN LIKE'%yicha.cn%'
这是一个模糊查询网址的语句,表里面有2000万条数据,这样查询起来太慢然后又改成了这样
select * from  TABLE_NAME where instr(COLUMN, 'yicha.cn') >0
这样查询是要快点了,但还是感觉还是慢不能接受我考虑过建过函数索引,但我查询的网址有1500个左右,相当于我是用成的动态SQL查询,每次查询是查询的不同的网址
请教各位有没有什么好方法,提高查询效率?

解决方案 »

  1.   

    '%%' 你这样走不了索引了。如果你有2000W条数据,要过滤出1500条。我觉得应该有其他的WHERE条件吧,先过滤掉大部分数据再来LIKE
      

  2.   


    这样是不走索引,没有其它WHERE条件,就只有模糊查询这个条件
      

  3.   

    你不会一开始就用select * from  TABLE_NAME where COLUMN LIKE'%yicha.cn%'查询出所有结果吧
    肯定还会有其他的条件 。。
    你先用其他的条件把结果查询出来。比如日期。。那样查出来的数据可能就只有几万条。或者更少。
    那你再用Like 这样速度会快很多。
    因为在用Like的时候数据库是不会走索引。所以你建索引也没有效果。
    只能通过这样的办法来解决你的问题
      

  4.   

    试一试函数索引create index idx_column on tableName ( instr(column, 'yicha.cn') );没测试过,呵呵
      

  5.   

    用正则表达式看是否快点select * from  TABLE_NAME where regexp_instr(column,'yicha\.cn')>0
      

  6.   

    ...
    LIKE'%yicha.cn%'不走索引,
    LIKE'yicha.cn%' 这个走啊,'%yicha.cn%'='yicha.cn%'+'%yicha.cn',不用我说了吧!
      

  7.   

    具体要看一下执行计划的,从现在的语句来看LIKE'%yicha.cn%'是
    不走索引的。
      

  8.   

    Quote: 引用 17 楼 hebeishimeng 的回复:

    引用 2 楼 fw0124 的回复:
    用全文索引。
    全文索引吧,
    或者字符有什么规律,发出来看看。[/quote这是这个字段的一部分数据,没什么规律