刚又看了一遍优化,你这种情况一定要建两个索引。如果建一个field1/2/3/4的复合索引,那么
select * from table1 where field3 = 1 and field4 = 2 
将用不到该索引

解决方案 »

  1.   

    sql根据索引的第一个字段开始来匹配是吗?
    假如是select * from table1 where field1 = 1 and field2 = 2
    和select * from table1 where field1 =1 and field3 = 3
    则建一个三字段的索引field1/2/3,后面一个查询能用到吗?
      

  2.   

    我來湊個數
       To jouky(马赫) 後面一個是用不到你的索引的
       對於一般情況,一張表中最重要的是聚合索引,應為他確定了你表的存儲方式,對於其他的
    索引效率有多高,就很難說了,應為黨你取一批很大的數據,而你又按照一個非聚合索引的方式去取,那麼效率不一定會高,在sql_server7.0後,一個非聚合索引的最後的節點在一個有
    聚合索引的表中不在指向一條紀錄,而指向一個聚合索引的節點,這使的他在調節非聚合索引
    比以前有了很大的改變,如果你在sql server中建表,你可能會發現他給你每一個字段都加上
    了一個非聚合索引,所以說如果你在sql server下,我認為建立單鍵索引可能是沒有意義的,
    從策略看,你提的第一個問題可能2個應該快,不過如果你紀錄很大,可變率低,索引的級數非常大,可能還會有變化,這個問題就比較複雜了.... 
       先亂灌一氣,再和大家研究研究
      

  3.   


    1.下列组合sql能完全优化(复合索引field1,field2,field3,field4)
      field1
      field1+field2
      field1+field2+field3
      field1+field2+field3+field42.下列组合sql只能部分优化  field1+field3
      field1+field4
      field1+field3+field43.如果组合中没有field1,sql将不用该索引
      

  4.   

    jasmine说第二个用不到索引,而LUJUN的观点好像能用,但作用没那么好,哪个确切一些?
    jasmine你说的聚合索引是指主索引吗?
    你的下面这些话能在解释一下吗,有点云里雾里‘在sql_server7.0後,一個非聚合索引的最後的節點在一個有
    聚合索引的表中不在指向一條紀錄,而指向一個聚合索引的節點,這使的他在調節非聚合索引
    比以前有了很大的改變,’
      

  5.   

    jasmine说的对,如果你的索引的首个字段不在where条件中的话,数据库是没办法用到该索引的。至少在oracle中完全是这样。
      

  6.   

    是的,索引得第一个字段很重要,如果是oracle,你可以用plsql developer来测试是否用到索引,也可以自己explain plane