关于TRIM的优化技巧

原创 2017年07月15日 16:54:56

背景

今天在论坛中,看到有人在问一个千万级别表查询的优化。一个简单的查询几分钟。语句如下

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的执行计划
 


总结

所以,从上面的例子上可以看出RTRIM,LTRIM 虽然不会让索引失效,但是会让从索引查找变成索引扫描。说明TRIM函数对索引的使用还是有影响。
如果以后有where筛选的情况,可以去掉RTRIM 。对于Ltrim根据具体的情况,看能否避免。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android中的TRIM优化

要了解Android 4.3 TRIM支持对性能的提升,首先要了解的是TRIM。TRIM 是什么?  Trim-一个ATA指令,由操作系统发送给SSD主控制器,告诉它哪些数据占的地址是“无效”的。当你...

Android 4.3 中的 TRIM 优化

老版本的Nexus7曾因本身的存储I/O性能不太够,影响系统流畅性,特别是随着使用时间增加,应用数量增加,很容易会变得非常慢,新版的Nexus 7大大提升了存储性能,事实上借助新的 Android 4...
  • anseven
  • anseven
  • 2014年08月31日 17:16
  • 389

开SSD Trim在OSX10.10

  • 2015年05月24日 20:03
  • 3.44MB
  • 下载

SSD固态硬盘的Trim命令是什么

SSD固态硬盘的Trim命令是什么 我相信听到过买SSD要买支持Trim的玩家不在少数,不过我敢肯定大多数玩家到目前为止还搞不懂Trim到底是干啥的,只是一味跟风,今天在这里我就稍微详细的解释下...
  • dayancn
  • dayancn
  • 2016年07月28日 13:59
  • 2655

MP3trim pro

  • 2015年09月03日 18:24
  • 1.01MB
  • 下载

Java中trim()中小于\u0020是什么意思

\u0020在Unicode编码中对应的是空格,\r \n都是小于\u0020。 '\r'是回车,'\n'是换行,前者使光标到行首,后者使光标下移一格。通常用的Enter是两个加起来。 ...
  • Ysm_Shu
  • Ysm_Shu
  • 2015年09月09日 23:18
  • 3194

MP3 Trim软件

  • 2013年12月11日 11:56
  • 216KB
  • 下载

Trim()的含义

  • 2013年01月26日 18:59
  • 348B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于TRIM的优化技巧
举报原因:
原因补充:

(最多只允许输入30个字)