盡量避免在SQL語句的WHERE子句中使用函式

2021-05-06 11:13:48 字數 524 閱讀 7167

----start

在sql語句的where子句中應該盡量避免在字段上使用函式,因為這樣做會使該字段上的索引失效,影響sql語句的效能。即使該字段上沒有索引,也應該避免在字段上使用函式。考慮下面的情況:

現在要求你把2009.9.24註冊的使用者都查出來,怎麼辦?可能有人會這麼寫:

不過很遺憾,這個語句是錯誤的,因為registerdate是timestamp型別,而'2009-9-24'預設是date型別,型別不匹配。即然型別不匹配,很自然會想到利用函式進行型別轉換,因此,很自然會寫出下面的語句:

上述語句完全正確,但是假如registerdate欄位上有索引,那麼會使索引失效,即使沒有索引,也不應該這麼做。那麼到底如何處理呢?答案是將它轉化為範圍掃瞄,如下:

---更多參見:db2 sql 精萃

----last updated on 2009.9.24

----written by shangbo on 2009.9.24

----end

sql語句優化 盡量使用索引避免全表掃瞄 1

1.對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。2.應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄,如 select id from t where num is null 可以在nu...

sql語句優化 盡量使用索引避免全表掃瞄 3

14.並不是所有索引對查詢都有效,sql是根據表中資料來進行查詢優化的,當索引列有大量資料重複時,sql查詢可能不會去利用索引,如一表中有字段 male female幾乎各一半,那麼即使在 上建了索引也對查詢效率起不了作用。18.盡可能的使用 varchar nvarchar 代替 char nch...

Sql語句查詢當天本週本月記錄的where條件

查詢當天 select from info where datediff dd,datetime,getdate 0 查詢24小時內的 select from info where datediff hh,datetime,getdate 24 info為表名,datetime為資料庫中的字段值 查...