两个查询语句
"SELECT COUNT(*) count1
    FROM table1 t1
    WHERE t1.id >= 20070625000000000000
      AND t1.pid = '10'
      AND t1.oper_id = '2177'"
"SELECT COUNT(*) count2
    FROM table1 t1
    WHERE t1.id >= 20070625000000000000
      AND t1.telePhone = '88888888'"
对表table1 的索引才更合理更科学,理由是?
谢谢,

解决方案 »

  1.   

    首先要看這個表的資料量大不大,如果很小,就沒必要建index,因為full scan速度會更快.
    大資料的情況如果單純為了這兩個語句的執行效率,可以建兩個Index
    index1:id,pid,oper_id
    index2:id,telePhone
    此外要根據平時有哪些常用的語句來建
    一般index數量不要超過子段數的20%效能比較好
      

  2.   

    如果数据是海量,以你给出的语句,其中关联的是三个字段,
    建议考虑三个字段哪个字段变化大,哪个字段变化小,
    如果id指的是流水号,通常流水号都是唯一的,也就是与其它记录相异,
    即使建index也index也会较大,可以考虑相异值更小一点的,
    由语句还是建pid,oper_id为好,个人意见,尽供参考.
      

  3.   

    如果t1.id >= 20070625000000000000 返回的数据量是很大的,不建议在此列建索引(只针对当前表)
    如果t1.pid = '10' 返回的数据量比较大也不适合建索引oracle的优化是基于成本的,有时候数据量的不同,或者你检索出来数据量的不同都会影响oracle的优化方案.看样子id应该是主键,不用建索引,如果是我的话再把经常查询的列建一个索引,再针对具体的查询情况再调整查询语句,例如,强制使用某个列的索引.
      

  4.   

    主鍵和外鍵在建表的時候都會自動加上索引。其它的字段主要看在where字句中出現的頻率。設定了索引還要看是否能起效。關鍵是實驗。多用用Explain plan看看SQL的執行計劃。