關於TRIM的優化技巧

2021-09-20 17:12:26 字數 1711 閱讀 2922

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

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'

我給他的建議是:1 調整索引 2.不要在style欄位上使用函式。今天先不管索引的調整,對於第二點,他使用了rtrim。今天分享下rtrim知識點和相關的優化技巧。

回到頂部

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的執行計畫

關於TRIM的優化技巧

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

優化的NSLog技巧

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

SQL的優化技巧

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