在开发中,我经常会遇到这种问题,如:
病人表:TBL_PATIENT列:
   id_record    主键
   p_name       姓名
   p_sex        性别
   pid          身份证号
   p_address    病人住址
   p_mid_id     病人治疗编码
   p_state      病人状态 
   dt_mid_date  治疗时间
   dt_input     录入时间
 
关于表的说明:
   在查询页面中,会有除主键外的所有查询条件供用户选择和输入。病人治疗编码p_mid_id几乎是没有重复的,并且用户用这个条件作为查询的可能性最高。病人住址p_address总是在查询条件中。录入时间也是常用的限制条件。病人状态p_state一共就四种。那么,我应该怎么建立索引呢?是在每一列上都建立索引,还是建立一个联合索引?还是在最常用的列上建立索引?还是针对最常用的列建立联合索引?还是???这种情况下我应该怎么建立索引最好?

解决方案 »

  1.   

    select t.name 
      from gzl_action_define t 
    where  t.id like '12%' 
    使用索引(RANGE SCAN) select t.name 
      from gzl_action_define t 
    where  t.id like '%12' 
    不使用索引(TABLE ACCESS (FULL)) 
      

  2.   

    时间的索引 也要注意  如果你查询语句喜欢 trunc(sysdate) 条件 那索引也就建立成这样,查询才能用到知道得不多,期待其它高手回答
      

  3.   

    id_record ,   p_mid_id ,p_address ,p_state  建立联合索引,这样用这四个列的每一列查询的时候都可以用联合索引作为索引
      

  4.   

    #7楼不错,要看使用频率情况,还要看你的表大小,时间如果每次都有就直接分区就好了,在病人治疗编码p_mid_id和时间做个索引应该就可以解决你的问题。
    其实即使是不是每次用到时间,最好也联系开发部门要求必须时间就好点。