低效的where 1=1

也許很多人在開發多條件查詢或模糊查詢的時候,爲保證不管選擇哪種過濾條件總保證查詢條件爲true,於是在where子句後選擇1=1或者0=0技巧來 滿足模糊查詢。當然這的確對開發人員來說是一個不錯的技巧。於是我在Mysql中通過上千萬條的數據測試發現很耗性能。即便是建了常用字段的索引(排序) 也沒有作用,足以確定1=1很低效,大數據量很耗性能。

  select * from t_user where 1=1

   因爲添加了"1=1"的過濾條件以後數據庫系統無法使用索引等優化查詢策略,數據庫系統將會被迫對每行數據進行掃描(也就是全表掃描)來比較此行是否滿足顧慮條件,當表中數據量比較大的時候查詢速度會非常慢。

select * from table where 1=1因爲table中根本就沒有名稱爲1的字段,所以該SQL等效於select * from table,這個SQL語句很明顯是全表掃描,需要大量的IO操作,數據量越大越慢,建議查詢時增加必輸項,即where 1=1後面追加一些常用的必選條件,並且將這些必選條件建立適當的索引,效率會大大提高
PS:這不是SQL寫法的問題,也不是數據庫的問題,是自己程序邏輯的問題

 

Java代碼  收藏代碼
  1.    
  2. StringBuffer buffer = new  StringBuffer( "select * from T where 1=1 " );  
  3. for (Map.Enty e : map){  
  4.     buffer .appand ("and " + e.getKey()+ " = '" +e.getValue()+ "'" );  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章