2013-07-10 53 views
0

我有結束這樣的(我從Java這樣做)的查詢:甲骨文 - 結合域和搜索 - 性能

WHERE 
    c.area_code = ? 
AND 
    c.cons_no = ? 
AND 
    c.cat_code = ? 

這是可以做到這樣也(我會越來越下面從用戶格式)

WHERE 
    c.area_code||'-'||c.cons_no||'-'||c.cat_code=? 

我讀了一些如該移交格式數據庫將影響性能。這就是我使用第一個查詢的原因。這是做這件事的最好方法?

回答

5

這只是奇怪的。

第二種方法將強制執行全表掃描,並且將表中的每一行都構建爲拼接形式,以便對照匹配字符串進行測試。如果其中任何值爲NULL,它也會中斷。它也將使不可能利用您測試的三個字段中可能存在的任何索引。

第一種方式更好。

+0

如果在某些數據庫值中有短劃線,第二個也可能會受到「短劃線注入」的影響。 –

1

作爲第二種方法基於字符串連接操作,它將不會使用索引,如果它存在於任何列上。因此,第一種方法更好。

此外,如果地區代碼不匹配,那麼不需要檢查第一種方法中包含的cons_no和cat_code。