数据库中有近6 7百万数据,一次需要查询出几十万行数据的几个字段,每次查询都在100s左右,请问有什么好的优化措施可以提高效率?
无where条件全表查询 。sql: select id,type,code from t 

解决方案 »

  1.   

    在id,type,code字段上建立索引。 
      

  2.   


    where 子句没有条件索引起作用么?
    还有就是 这个sql的话  建立联合索引还是单独建立索引啊?
      

  3.   

    如果表中字段很多的话,可以在id,type,code 上面建索引,这样查询的时候就不用全表扫描了,只要扫描这个组合索引就可以了。
    要是字段就这几个的话,那就只能做应用软件的时候分页了,是用FIRST_ROWS提示试试,不然只能升级硬件了。
      

  4.   

    这样的查询除了做数据导出,没有where条件,查出来也没有什么意义啊,不知道你们怎么用查出的数据?
      

  5.   


    6 7 百万,查询出几十万,还无where条件。这个逻辑
      

  6.   

    这个表有20个字段 查询的这三个字段已经建立了联合索引,
    现在是在工具 比如sqlplus里面看plan的话 是index fast scan cost 576  rows 649k
    但是项目用到的是ejb的映射, 在项目中取出数据的时间比较长 大约100s现在的问题是 如何将项目中取得这些数据的时间缩短
      

  7.   


    只能升级硬件了,或者修改一些sga,pga什么的,从sql角度上来看是没有办法再优化了
      

  8.   

    已经建立索引了,而且还没有where条件。
    确实没什么方法优化了好像。。
    看看其他高手的了
      

  9.   

    可以分页显示,用FIRST_ROWS出来一部门解决一部分。
      

  10.   

    这个主要看你的复合索引的是怎么建的,如果复合索引的第一字段条件的,是一个type这种的类型的话,这种粒度比较大的条件做的复合索引,在觉的这个种索引在查询的效率不高,还是分开独立建索引比较好的,复合索引里面对的查询条件的顺序有要求,这样在查询时只有按这个定式去查询,别的不走索引,效果会差
      

  11.   

    你这个效率已然算是不错的了,如果需要优化,就提升硬件吧。
    在数据库进行适当的表分区,让SQL并行从各分区提取数据。每个分区放在独立磁盘、独立通道的存储体。
      

  12.   

    你这个效率已然算是不错的了,如果需要优化,就提升硬件吧。
    在数据库进行适当的表分区,让SQL并行从各分区提取数据。每个分区放在独立磁盘、独立通道的存储体。