有张日志表,每天都有上亿的数据,其中有个字段是客户的访问地址信息。我想统计所有客户中访问了 XXXX  地址的数量该字段目前没加索引select * from table where ziduan ='%XXXXXX%'
许久没有结果select * from table where regexp_like=(ziduan, 'XXXXX','i')
4秒后有结果返回2个SQL的执行计划,用正则的第2条SQL COST值要比第一条大一些,其他指标一样。但查询结果的速度缺比第一条要快。------毕竟我要统计数量,结果
select count(*) from table where regexp_like=(ziduan, 'XXXXX','i')
也许久没有结果-----网上搜了下关于SQL中用正则
http://topic.csdn.net/u/20100816/16/f4852d24-afb5-458f-8aea-bfd22ec5fc81.html
按这个帖子说,正则函数是没法走索引,那么横竖都是走全表。但如果用like 但前后都用了%,也是不走索引那.............就是说在速度上没救了?

解决方案 »

  1.   

    select * from table where ziduan  like '%XXXXXX%',like吧~?
      

  2.   

    啊  漏打一个like =   :D
      

  3.   


    --instr()
    select count(*) from table where instr(ziduan,'XXXXX')>0
      

  4.   

    1 你的第一条sql 写的有问题 where  ziduan ='%XXXXXX%' 是错误的写法
    2 查询数据 就用你的第二条 ,也就是花费4秒时间的
    3 统计数据用  select count(*) from tablename where  ziduan ='%XXXXXX%' 
      

  5.   

    1.建议将表按天分区
    2.与楼上类似,在12点后设置job,将前一天的数据按一定统计格式生成统计表(同样按天分区),查询数据时直接查询统计表
      

  6.   


    与 like '%XXXX%'类似,可以试一试