一张表:每个月大概有4千万数据;字段type里面就存放3种类型分别用1,2,3来标示(由于重复值很多没有建索引);
其中:查type = 1 量大概有 3.5千万(占了表大部分的量);
        type = 2,3 的量就比较少;
发现一个问题:查type = 1 时候速度很慢,查type =2 或type =3 时候速度快了很多;
请问高手有没有好方法解决 查type = 1 的速度快一些,谢谢?

解决方案 »

  1.   

    3500万,返回数据量如此之大,时间自然短不了。但是你的查询应该不会每次均只有此一个条件吧,那也太恶高了。
    如果不是OLAP,索引确实没必要。如果服务器是多CPU,可以考虑用并行查询来优化之。
      

  2.   

    查询type = 1的,由于要走 table full scan, 速度必然慢。 你说扫描type=2,3的快,你又没建索引,一样走table full scan, 为啥能快呢? 是因为取的数据少了,显示快?建议索引:create index x on table_x(case when type = 2 then 2 
                                   when type = 3 then 3
                                   else null
                             );

    create index x on table_x(decode(type, 2, 2, 3, 3));
      

  3.   

    当字段取值的基数小的时候,可以考虑建立位图索引create bitmap index on table1(type);不过由于你的数据比较集中,1占大多数,这样看来不太合适,实际应用中,不一定要返回所有数据显示,可能只需要前面部分,
    于是可以应用下HINT,
    select /*+ALL_ROWS_FIRST N*/ * from table1 where type =1 这样可以快速返回前N行...JUST 一些些建议