2011-03-09 48 views
2

,如果我做Oracle索引加入

select * 
    from table1 
    where table1.col1 = 'xx' 
     and table1.col2 = 'yy' 
     and table1.col3= 'zz'` 

的執行計劃顯示全表掃描。 此表上的索引針對col4和col5存在。 我是否需要在每個col1,col2,col3上設置索引以使查詢性能更好?

此外,如果查詢是這樣的:

select * 
    from table1,table2 
    where table1.col1=table2.col2 
     and table1.col2 = 'yy' 
     and table1.col3= 'zz' 

如果我們創建col1和col2上的指標,就足夠了?

回答

1

你應該嘗試在您使用在查詢中列添加索引:

  • table1的col1中
  • 表1 COL2
  • table1的COL3
  • 表2 COL2

注在某些情況下具有多列索引也是有利的,例如:

  • 表1(COL2,COL3)

很難預測哪些指數將工作的情況下儘量更多地瞭解您的數據,但你可以嘗試一些不同的可能性,看看有什麼效果最好。

+0

謝謝。你提到'不知道更多關於數據'我可以在所有列創建索引之前檢查什麼? – Victor 2011-03-09 22:50:07

+0

@Kaushik:重要的是指數的選擇性。數據庫通常更喜歡使用最具選擇性的索引。找出哪個索引更好的一個簡單方法是添加您認爲可能使用的所有索引,然後查看查詢計劃以查看其中哪些實際使用。然後,如果您不需要它們,您可以再次刪除其他索引。顯然,如果你有一個表格中包含合理數量的測試數據,那麼效果會更好 - 如果表格幾乎是空的,索引將不會被使用,如果你有數十億行索引創建將需要很長時間。 – 2011-03-09 22:52:29