select f.type_name, b.elec_string, e.source_name, d.supplyer_name
  from mobile_storage           a,
       mobile_sale_detail       b,
       mobile_contract          c,
       mobile_param_supplyer    d,
       mobile_param_mobile_type f,
       mobile_param_source      e
 where a.elec_string = b.elec_string
   and a.source_id = e.source_id
   and c.supplyer_id = d.supplyer_id
   and a.contract_id = c.contract_id
   and b.mobile_type = f.mobile_type
   and b.sale_id = '12345'               --条件1   id='12345'  (页面传入条件) 
   and b.mobile_type = 'HUAW0003';       --条件2   mobile_type = 'HUAW0003'  (页面传入条件)这是我现在的查询方法,效率不高,我不知道怎么改进,而且不同的条件查询有差,快的在10秒左右,慢的在1分钟左右,无法接受。下面我先介绍下几个表结构,只将所需关键列给出  (数据量很大,必须要效率高)【mobile_storage】  a      
  [mobile_type]  //终端类型
  [elec_string]  //终端串号●,每个终端唯一,根据串号可唯一确定一个终端
  [source_id]    //用来关联【mobile_param_source表的source_id】查找终端的功能
  [contract_id]  //用来关联【mobile_contract表的contract_id】查找供应商[supplyer_id]
                   再用[supplyer_id]去对于【mobile_param_supplyer表的supplyer_id】查找供应商名称[supplyer_name]
  
【mobile_sale_detail】 b 
  [sale_id]      //销售单号,一个单号可能包含多个终端   
  [mobile_type]  //终端类型  
                   (用[sale_id],[mobile_type]来确定[elec_string]去对应【mobile_storage表中的】[elec_string])
  [elec_string]  //终端串号,每个终端唯一,根据串号可唯一确定一个终端【mobile_contract】 c
  [contract_id]  //
  [supplyer_id]  //用来关联【mobile_param_supplyer表】查询出供应商名称字段[supplyer_name]【mobile_param_supplyer】 d
  [supplyer_id]  //供应商ID
  [supplyer_name]//供应商名称字段●
 
【mobile_param_mobile_type】 f
  [mobile_type]  //终端类型
  [type_name]    //终端类型名称●
  
【mobile_param_source】 e
  [source_id]    //功能ID
  [source_name]  //终端功能名称●
  
  
  注:●为需要查询出来的四个字段
  
基本逻辑:
  输入2个参数为   id='12345' 和  mobile_type='HUAW0003'
  从【b表】中查找到elec_string去关联【a表】查找到contract_id和source_id分别对应【c表】【e表】
  再根据【c表】中的supplyer_id去【d表】中找到supplyer_name还有不清楚的请问我,我想应该很详细了

解决方案 »

  1.   

    每个表的数据量有多少? 相关字段建索引。如果还慢就把执行计划贴上来。1:
    b.sale_id  -- 数据类型是number型的还是varchar2型的,如果是number型的换成下面的语句试试:
    and b.sale_id = 123452: 如果是web程序传过来的值,把下面换成绑定变量的方式:
    and b.sale_id = '12345'              --条件1  id='12345'  (页面传入条件) 
    and b.mobile_type = 'HUAW0003';      --条件2  mobile_type = 'HUAW0003'  (页面传入条件) 
    比如:在JAVA里面,
    ...
    and b.sale_id = ?
    and b.mobile_type = ?;
    ...
      

  2.   

    那是相当大吧,联通项目,我是在做前台,执行sql来拿到要显示的东西
      

  3.   

    sale_id  是varchar2
    换成绑定变量的方式不会 , 要怎么写啊,是设参数吗
      

  4.   

    mobile_storage       有1121666条记录
    mobile_sale_detail     445326
    MOBILE_CONTRACT        586
    MOBILE_PARAM_SUPPLYER  9511
    MOBILE_PARAM_SOURCE    3
    执行计划是什么,数据库我不是很了解