select * from table where a like 'xxx%'
与a有没有索引没有关系,like是全表搜索。
如果:
select * from table where a > xxx;
则:
效率因为索引的存在而得到提高!

解决方案 »

  1.   

    to dajian2000(zhj+Oracle) 你说的全表查询有一定道理,但我想只是在like '%xxx%'这种情况才是全表查询
    如果是like 'xxx%',建索引会明显改善查询。
    我做了试验,在500万条记录时,有索引与没有索引真是天壤之别,不信你试试。
      

  2.   

    是这样的,我看的一个关于合理使用索引的原文如下:避免困难的正规表达式 
    MATCHES和LIKE关键字支持通配符匹配,技术上叫正规表达式。但这种匹配特别耗费时间。例如:SELECT * FROM customer WHERE zipcode LIKE “98_ _ _” 
    即使在zipcode字段上建立了索引,在这种情况下也还是采用顺序扫描的方式。如果把语句改为SELECT * FROM customer WHERE zipcode >“98000”,在执行查询时就会利用索引来查询,显然会大大提高速度。 
    另外,还要避免非开始的子串。例如语句:SELECT * FROM customer WHERE zipcode[2,3] >“80”,在where子句中采用了非开始子串,因而这个语句也不会使用索引。 
    你的实验肯定没错,不过我想可能采取文中的方式会使得效率更为提高吧?!
    你觉得呢?
      

  3.   

    to dajian2000(zhj+Oracle) 谢谢,很受启发。
     
      

  4.   

    to dajian2000(zhj+Oracle) 谢谢,很受启发。
      

  5.   

    区别是有的,你自己的实验就看出来了。
    我想说的是select * from table where a like 'xxx%'就要看你返回的数据行占总行数的多少,如果超过40%,用全表扫描就更快了。
    当然这也和你的优化器有关,RBO和CBO对索引是有区别的。