日期:2014-05-17  浏览次数:20921 次

怎么样建索引更合理?(回答有分)
两个查询语句
"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   的索引才更合理更科学,理由是?
谢谢,

------解决方案--------------------
从这条语句来分析:
可以在 id 上建立索引即可
------解决方案--------------------
首先要看這個表的資料量大不大,如果很小,就沒必要建index,因為full scan速度會更快.
大資料的情況如果單純為了這兩個語句的執行效率,可以建兩個Index
index1:id,pid,oper_id
index2:id,telePhone
此外要根據平時有哪些常用的語句來建
一般index數量不要超過子段數的20%效能比較好
------解决方案--------------------
如果数据是海量,以你给出的语句,其中关联的是三个字段,
建议考虑三个字段哪个字段变化大,哪个字段变化小,
如果id指的是流水号,通常流水号都是唯一的,也就是与其它记录相异,
即使建index也index也会较大,可以考虑相异值更小一点的,
由语句还是建pid,oper_id为好,个人意见,尽供参考.

------解决方案--------------------
如果t1.id > = 20070625000000000000 返回的数据量是很大的,不建议在此列建索引(只针对当前表)
如果t1.pid = '10 ' 返回的数据量比较大也不适合建索引

oracle的优化是基于成本的,有时候数据量的不同,或者你检索出来数据量的不同都会影响oracle的优化方案.

看样子id应该是主键,不用建索引,如果是我的话再把经常查询的列建一个索引,再针对具体的查询情况再调整查询语句,例如,强制使用某个列的索引.
------解决方案--------------------
主鍵和外鍵在建表的時候都會自動加上索引。其它的字段主要看在where字句中出現的頻率。設定了索引還要看是否能起效。關鍵是實驗。多用用Explain plan看看SQL的執行計劃。