2011-05-01 75 views
0

我目前是一位開發Java/DB2後端的Web應用程序的初級開發人員,並且我有一些SQL查詢運行速度很慢。目前的數據庫沒有經過優化,所以肯定有改進的餘地。唯一的問題是我沒有這方面的經驗,沒有人可以幫助我。優化選擇基於多個WHERE條件的查詢

SomeTableName 
MyPkey 
ColOne 
ColTwo 
ColThree 
ColFour 
ColFive 

我試圖找出如何優化數據庫查詢這樣的:

SELECT * FROM SomeTableName WHERE ColOne = 'some value' 
SELECT * FROM SomeTableName WHERE ColOne = 'some value' AND ColTwo = 'another' 
SELECT * FROM SomeTableName WHERE ColFive = 11 AND ColThree = 'hello world' 
SELECT * FROM SomeTableName WHERE ColOne = 'hi' AND ColTwo = 'val1' AND ColThree = 'val2' AND ColFour = 'val3' AND ColFive = 'val4' 

我試圖描繪,則SELECT語句具有WHERE條件有不同的列組合和值,我不知道如何優化這樣的查詢。

有什麼建議嗎?

編輯:我不確定DB2是否添加了自己的優化,但肯定沒有任何列上的索引設置。

+0

您應該看看的第一個地方是表定義,儘管我對Java或DB2瞭解不多,所以我無法幫助您瞭解具體情況。在大多數sql情況下,通過確保有適當的索引可以大大提高這樣的查詢。 – Henry 2011-05-01 22:50:07

+0

該數據庫沒有任何索引。我以前想過創建一個,但不知道如何設置它(也就是說,我應該爲每列創建一個索引還是應該在一個索引中創建多個列) – 2011-05-01 22:52:33

+0

您幾乎可以做最簡單的事情一個DB。如果它們運行緩慢,則應該在表中添加索引。沒有他們,你每次都在進行全表掃描。 – 2011-05-01 22:57:23

回答

0

你一定要玩數據庫上的索引。他們使插入和更新更加昂貴,但是您的查詢運行得更快,所以它們可能是整體上的大贏家。索引對於具有大量值的列最有效(即,對於性別列而言不是那麼多)。它們對於您在哪裏條件下參考的列更有效。在試用索引時,一定要查看數據庫的查詢優化器是否利用它們,使用SQL EXPLAIN動詞或諸如db2expln之類的工具。

0

從你的例子看來,你已經通過索引colOne獲得了一些性能。 基本上,按照與要使用的索引相同的順序使用這些列。

0

通過在(colOne,colTwo,colThree,colFour,colFive)上創建索引,您將獲得不錯的性能增益。查詢1,2和4將全部使用它。