2016-12-30 49 views
-1

我正在寫一個查詢,它將通過我的程序在數據庫上執行。在該查詢中,我使用從客戶端發送的值添加了where子句。在某些值不存在的情況下,我將它留空(即它看起來像select * from tablename where columname like '%%' and columname1 like '%%')。這是否會導致任何性能問題?添加where子句(如'%%')會導致任何性能問題?

+0

請用你正在使用的數據庫標記你的問題。 –

+0

根據條件檢查內容並構建查詢會很複雜嗎? – AxelH

回答

3

回答這個問題的最好方法是通過測試。您應該嘗試使用和不使用條件的查詢。

添加條件到where子句可以至少在三個方面影響性能:

  • 條件可以使它更難以優化使用索引(或選擇適當的分區)的查詢。
  • 條件可以改變表的「選擇性」。如果優化器不知道被選擇的行數,那麼它可能會選擇一個效率較低的連接和聚合算法。
  • 評估條件本身可能很昂貴。

如果查詢很簡單:

select t.* 
from t 
where col like '%%'; 

然後前兩點是不相關的。第三個有點相關。問題是數據庫是否「優化」了like(因爲該模式是通用的)。我不認爲它確實如此;它將不得不用col is not null來代替它。

使用like有一些開銷。我會推測like的開銷遠低於首先閱讀表的開銷。所以,雖然它可能會影響性能,但在一個簡單的情況下,效果會相對較小。