關於TRIM的優化技巧

2022-02-08 21:04:47 字數 1738 閱讀 6323

今天在論壇中,看到有人在問乙個千萬級別表查詢的優化。乙個簡單的查詢幾分鐘。語句如下

select  work_date ,

major ,

style ,

jo_key_seq ,

component ,

qty ,

bundle_id ,

jo_sku_key_seq

from    dbo.rfid_transaction_table

where   rtrim(style) = '68036n/ss10'

and work_date >= '2009-07-01'

and work_date <= '2017-10-01'

and major = '911'

rtrim,ltrim 都是用來去掉空格的,大家可能都知道。但是有幾個知識點大家可能不知道。就是在用where條件去對比篩選時,sql server 會自動去掉右邊的字串的空格。

以下例子在sql server 2008 測試。

例如:create table test2(id int,name varchar(22))

insert into test2 values(1,'owen ')

insert into test2 values(2,'owen  ')

insert into test2 values(3,'owen  ')

select * from test2 where name='owen'

如下圖所示,3條記錄都是可以查出來的。

和   select * from test2 where rtrim(name)='owen' 查詢結果是一樣的

所以大家在開發的時候,where 條件加上rtrim是沒有必要的

對應ltrim 呢

insert into test2 values(4,' owen  ')--左邊加入空格

select * from test2 where name='owen' 

仍然只能查出3條記錄。所以sql server 沒法去掉左邊的空格。

我們都知道對欄位使用函式會使字段上的索引失效。那麼rtrim 和 ltrim 會使用索引失效嗎?我們用

select  [documentid] ,

[title]

from    [adventureworks].[production].[document]

where   title = 'crank arm and tire maintenance'

在沒有使用函式時執行計畫

在使用rtrim時的執行計畫

在使用ltrim的執行計畫

所以,從上面的例子上可以看出rtrim,ltrim 雖然不會讓索引徹底失效,但是會讓從索引查詢變成索引掃瞄。說明trim函式對索引的使用是有影響的。

如果以後有where篩選的情況,可以去掉rtrim 。對於ltrim根據具體的情況,看能否避免。

關於TRIM的優化技巧

看到有人在問乙個千萬級別表查詢的優化。乙個簡單的查詢幾分鐘。語句如下 select work date major style jo key seq component qty bundle id jo sku key seq from dbo.rfid transaction table wher...

優化的NSLog技巧

使用nslog的乙個風險是 它的執行會占用時間和裝置資源。簡單而粗暴的解決方案是 在release前,將所有的nslog注釋掉。簡單有效,但 是 下次你要除錯時,又得將nslog乙個個取消注釋。以release模式編譯的程式不會用nslog輸出,而以debug模式編譯的程式將執行nslog的全部功能...

SQL的優化技巧

一 一些常見的sql實踐 1 負向條件查詢不能使用索引 not in not exists都不是好習慣 可以優化為in查詢 2 前導模糊查詢不能使用索引 而非前導模糊查詢則可以 3 資料區分度不大的字段不宜使用索引 原因 性別只有男,女,每次過濾掉的資料很少,不宜使用索引。經驗上,能過濾80 資料時...