关于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根据具体的情况,看能否避免。

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

MyBatis动态SQL中trim标签的使用参数

MyBatis动态SQL中trim标签的使用   MyBatis 官方文档 对 动态SQL中使用trim标签的场景及效果介绍比较少。   事实上trim标签有点类似于replace效果。 ...
  • baidu_33497625
  • baidu_33497625
  • 2016年01月12日 11:34
  • 3451

java代码优化总结

下面是参考网络资源总结的一些在Java编程中尽可能要做到的一些地方。   1. 尽量在合适的场合使用单例   使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单...
  • paul342
  • paul342
  • 2016年08月30日 15:20
  • 1354

Java代码优化技巧

前言 在写作Java代码时 效率是十分重要的 尤其是在实际应用中 学长Eric就来总结一下自己平时在优化Java代码时的心得...
  • songyuc
  • songyuc
  • 2017年03月02日 17:33
  • 330

oracle中trim函数的用法

转载出处:http://blog.csdn.net/E_wsq/archive/2009/11/14/4810757.aspxoracle中trim函数的用法 In Oracle/PLSQL, the...
  • wang4978
  • wang4978
  • 2009年12月09日 09:19
  • 6699

jquery $.trim()方法使用介绍

 转载于:http://www.jb51.net/article/44763.htm $.trim(str)的作用是去掉字符串首尾空格,下面为大家介绍下其具体的使用 ...
  • u012102536
  • u012102536
  • 2016年07月12日 16:48
  • 883

oracle trim函数用法详解

今天看oracle文档,发现trim函数的用法不仅仅局限于去除字符串的空格!特翻阅官方解释,并最如下实验,希望大家共同学习! 1. 首先看一下trim函数的语法图:http://docs.oracl...
  • IndexMan
  • IndexMan
  • 2012年07月15日 16:20
  • 9746

SQL 中的 TRIM 函数

SQL 中的 TRIM 函数是用来移除掉一个字串中的字头或字尾。最常见的用途是移除字首或字尾的空白。这个函数在不同的资料库中有不同的名称: MySQL: TRIM( ), RTRIM( ), L...
  • SHENNONGZHAIZHU
  • SHENNONGZHAIZHU
  • 2016年07月24日 16:53
  • 3152

Mybatis中运用小技巧(四)trim标签的使用

trim元素的主要功能是可以在自己包含的内容钱加上某些前缀,也可以在其后加上某写后缀,与之对应的属性是prefix和suffix;可以把包含内容的首部某些内容覆盖,即忽略,也可以把尾部的某些内容覆盖,...
  • death05
  • death05
  • 2016年11月09日 11:59
  • 9505

js编写trim()函数

1.js中本身是没有trim函数的,不过你可以自己写一个 function trim(str) {     var newStr = str.replace(/^\s*$/g,'')     r...
  • tianyazaiheruan
  • tianyazaiheruan
  • 2013年10月23日 17:28
  • 2955

JavaScript实现trim函数

有三种方法 别人的方法,使用正则表达式写成类的方法格式如下:(str.trim();)       String.prototype.trim=function(){    return th...
  • david___
  • david___
  • 2016年11月03日 21:41
  • 687
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于TRIM的优化技巧
举报原因:
原因补充:

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