有2个表 A,B,A有2000多W的数据,B表有900多W的数据,主键是a.id,b.id  索引建立的(dengluhao,bianma)
select * from a,b where a.dengluhao=b.dengluhao and a.bianma=b.bianma
但是查询速度很慢,怎么优化下

解决方案 »

  1.   

    select statement,goal =all_rows
           hash join
                indeexfast full scan
                indeexfast full scan
      

  2.   

    你提供的信息基本无什么用啊,语句上基本无什么可以优化。
    如果单独为了加快这个查询速度,可以采取ORACLE并行来查询,如果返回的结果集是很小的,这样就不建议了。
    另外,可以通过优化一下ORACLE的环境以及参数,可能会有点帮助,不过,如果这个是一个生产裤,而且里面挂了很多用户,这样就不要随便修改。
    希望对你有点帮助。
      

  3.   

    执行计划是正确的 用hash_join,真要提高查询速度就开并行吧
    /*+ parallel(TABLE 4) */
      

  4.   

    对,如果是生产库,不能随便改表结构啥的,只能看看analyze table,select /*+rule*/ select /*+index()*/之类的
    如果是测试环境,可以考虑分区存储
      

  5.   

    看你的优化器选择的是什么,如果是CBO没什么优化的,如果是RBO把 from 后面的a,b顺序换一下
      

  6.   

    [code=SQ]
    show parameter optiNAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    filesystemio_options                 string      none
    object_cache_optimal_size            integer     102400
    optimizer_dynamic_sampling           integer     2
    optimizer_features_enable            string      10.2.0.1
    optimizer_index_caching              integer     0
    optimizer_index_cost_adj             integer     100
    optimizer_mode                       string      ALL_ROWSoptimizer_secure_view_merging        boolean     TRUE
    plsql_optimize_level                 integer     2
    SQL>[/code]也可以使用hint