去掉影響效率的where 1 1

2022-05-07 12:39:08 字數 558 閱讀 1066

最近看了篇文章,覺得挺有道理。實際專案中,我們進行sql條件過濾,我們不能確定是不是有條件。也不能確定條件的個數。大多數人會先把sql語句組裝為:

select

*from t_table where1=

1

這樣,如果有其他過濾條件直接加上「and 其他條件」,如果沒有的話,where 1=1也不影響查詢結果。這樣很可能會造成非常大的效能損失,因為使用新增了「1=1」的過濾條件以後資料庫系統就無法使用索引等查詢優化策略,資料庫系統將會被迫對每行資料進行掃瞄 來比較此行是否滿足過濾條件, 當表中資料量比較大的時候查詢速度會非常慢。 因此如果資料檢索對效能有比較高的要求就不要使用這種方式。下面是參考別人一種參考實現,偽**如下:

private

void

doquery()   

if(條件2是否新增)

if(條件3是否新增)

executesql(sql);

} private   

else   

return

true

;}

為什麼要用where 1 1?

之前一直不太明白,sql語句裡為什麼要寫where 1 1 巴拉巴拉巴拉 提公升某種執行效率?其實,1 1 是永恆成立的,意思無條件的,也就是說在sql語句中有沒有這個1 1都可以。這個1 1常用於應用程式根據使用者選擇項的不同拼湊where條件時用的。如 web介面查詢使用者的資訊,where預設...

T SQL中WHERE 1 1的作用

1 1或者 a a 等等恒等式是t sql中表達true的方法。因為在t sql中沒有true這樣的關鍵字或值,所以需要借助這些恒等式來表達true的概念。相對的,同樣可以使用1 1或者1 2等來表達false。在應用程式的安全性方面,使用這些式子是sql注入的基本原理,所以在拼接sql語句的時候要...

SQL中WHERE 1 1的作用

個人認為這篇文章寫的非常好,用例子把道理說的非常明白,所以轉了,希望對大家有所幫助。1 1或者 a a 等等恒等式是t sql中表達true的方法。因為在t sql中沒有true這樣的關鍵字或值,所以需要借助這些恒等式來表達true的概念。相對的,同樣可以使用1 1或者1 2等來表達false。在應...