like '%%'是不会使用索引的,会对tab作全表扫描如果查询结果占表的小部分
由于cola是主键,楼主可以把cola拿出来,单独建只有cola列的表tab2,pctfree设为0,并用CACHE选项缓冲
提高tab2全表扫描的效率sql改写为
select t1.colb from tab t1, tab2 t2 where t1.cola=t2.cola and t2.cola like '%x%'

解决方案 »

  1.   

    to  nebulaly(nebulaly) :
    请问pctfree设为0是什么意思啊?怎样设置CACHE选项缓冲?
      

  2.   

    在create table语句中指定pctfree为0和cache,使每个block都写满,并且所有的block都放在内存中具体语句就不用写了把?
      

  3.   

    用了like就要遍历全表
    如果要提高查询速度建议可以先做一个表分析(不过分析的时候也慢)
    分析后查询速度需要遍历表的就快多了
      

  4.   

    把表Tab的主键cola取出来建一个索引表ColaIdx,结构如下:
    ColaPart   Cola
    abc        abc
    bc         abc
    c          abc
    ……
    ColaPart字段放的是一个Cola拆分后的值,Cola有多长就有多少条记录。
    字段ColaPart建一个索引。
    然后:
    SELECT colb 
      FROM tab 
     WHERE cola IN (SELECT Cola FROM ColaIdx WHERE ColaPart LIKE 'x%')
      

  5.   

    to surf88(无心化雨):
    怎么分析阿
      

  6.   

    to tdaly(溜达溜达):
    这段是做什么用的?分析吗?