2011-08-26 122 views
1

我想從DB2數據庫的表中獲取以下數據。db2中「in」條件查詢的性能

select col1, col2, col3 from employee where employee_id in (1,2,3) 

請分享您對查詢性能的看法?任何替代品?

+1

你有什麼指標在桌子上?我從來沒有使用db2,但一個明顯的選擇是範圍尋找'where employee_id> = 1和employee_id <= 3' –

+0

如果在employee_id上​​有適當的索引,絕對沒有問題 – MarianP

+0

只要值的部分在'in '子句不是不相關的子查詢。在這種情況下,iSeries上的DB2有一些性能影響(範圍選擇或實際的'join'往往會更好) –

回答

2

DB2的IN謂詞優化傳統上傾向於估計結果集的基數是錯誤的。有了IN謂詞,它有時可能會優化以獲得比常識更多的結果。

此外,它的工作原理與上述Martin Smith完全一樣 - 按順序運行3個單獨的索引查詢。這是可修復由要麼使優化

db2set DB2_INLIST_TO_NLJN=true 

這迫使DB2創建一個臨時的虛擬表,並通過切換到不同類型的查詢執行嵌套循環連接(在很多情況下,一個很好的執行選項)如遠程版本。您也可以輕推DB2使用嵌套循環連接的版本一樣

select col1, col2, col3 
from employee, (values 1,2,3) as v(ids) 
where employee_id=v.ids 

請記住,這是所有有些大專院校的,除非你的目標表在你的查詢項目和行的顯著量,並且必須運行大量這樣的查詢。