背景

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

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

关于TRIM的优化技巧的更多相关文章

  1. SQL Server 聚合函数算法优化技巧

    Sql server聚合函数在实际工作中应对各种需求使用的还是很广泛的,对于聚合函数的优化自然也就成为了一个重点,一个程序优化的好不好直接决定了这个程序的声明周期.Sql server聚合函数对一组值 ...

  2. SQL优化技巧

    我们开发的大部分软件,其基本业务流程都是:采集数据→将数据存储到数据库中→根据业务需求查询相应数据→对数据进行处理→传给前台展示.对整个流程进行分析,可以发现软件大部分的操作时间消耗都花在了数据库相关 ...

  3. Java程序性能优化技巧

    Java程序性能优化技巧 多线程.集合.网络编程.内存优化.缓冲..spring.设计模式.软件工程.编程思想 1.生成对象时,合理分配空间和大小new ArrayList(100); 2.优化for ...

  4. 【转】MyEclipse 2015优化技巧

    MyEclipse 2015优化技巧 MyEclipse 2015优化速度方案仍然主要有这么几个方面:去除无需加载的模块.取消冗余的配置.去除不必要的检查.关闭更新. 第一步: 去除不需要加载的模块 ...

  5. [转] Python 代码性能优化技巧

    选择了脚本语言就要忍受其速度,这句话在某种程度上说明了 python 作为脚本的一个不足之处,那就是执行效率和性能不够理想,特别是在 performance 较差的机器上,因此有必要进行一定的代码优化 ...

  6. Python代码性能优化技巧

    摘要:代码优化能够让程序运行更快,可以提高程序的执行效率等,对于一名软件开发人员来说,如何优化代码,从哪里入手进行优化?这些都是他们十分关心的问题.本文着重讲了如何优化Python代码,看完一定会让你 ...

  7. Python 代码性能优化技巧(转)

    原文:Python 代码性能优化技巧 Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化. ...

  8. Python 代码性能优化技巧

    选择了脚本语言就要忍受其速度,这句话在某种程度上说明了 python 作为脚本的一个不足之处,那就是执行效率和性能不够理想,特别是在 performance 较差的机器上,因此有必要进行一定的代码优化 ...

  9. php优化技巧

    PHP优化的目的是花最少的代价换来最快的运行速度与最容易维护的代码.本文给大家提供全面的优化技巧. 1.echo比print快. 2.使用echo的多重参数代替字符串连接. 3.在执行for循环之前确 ...

随机推荐

  1. linux命令11

    tar命令的使用 tar文件是把几个文件的(或)目录集合在一个文件夹里,是创建备份和归档的最佳工具. [root@localhost ~]# tar --help用法: tar [选项...] [FI ...

  2. Vue.js高仿饿了么WebApp

    介绍 学习Vue.js也有一阵子了,为了加深对Vue的理解及运用,做了一个小项目.这是一个高仿饿了么外卖WebApp,现已完成商品预览.商品详情.商家预览.添加购物.查看评论等功能. 部分截图 项目预 ...

  3. yarn工作流程

    YARN 是 Hadoop 2.0 中的资源管理系统, 它的基本设计思想是将 MRv1 中的 JobTracker拆分成了两个独立的服务 : 一个全局的资源管理器 ResourceManager 和每 ...

  4. SQL SERVER大话存储结构(6)_数据库数据文件

            数据库文件有两大类:数据文件跟日志文件,每一个数据库至少各有一个数据文件或者日志文件,数据文件用来存储数据,日志文件用来存储数据库的事务修改情况,可用于恢复数据库使用.     这里分 ...

  5. Xamarin开发笔记—WebView双项事件调用

    1.Xamarin调用WebView: 原理:Xamarin.Forms WebView内置方法xx.Eval(..)可以调用到页面里面的js函数. WebView展示的代码如下: var htmlS ...

  6. 关于sqlmap的一些命令

    Options(选项):--version 显示程序的版本号并退出-h, --help 显示此帮助消息并退出-v VERBOSE 详细级别:0-6(默认为1)Target(目标):以下至少需要设置其中 ...

  7. eclipse 好用的插件总结

    改变eclipse的背景色,各种关键词颜色的插件. color theme. 在mac下最好是通过手动复制粘贴jar文件到, eclipse的plugins下面. 通过Install new soft ...

  8. Vulkan Tutorial 18 重构交换链

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Introduction 现在我们已经成功的在屏幕上绘制出三角形,但是在某些情况下, ...

  9. “前”方有坑,绕道而行(一)-- H5+CSS

    1. 关于  数字.英文 不换行问题: 情景:昨天测试 小程序,输入英文,没有换行,且 下方有横向滚动条: 解决:word-break: word-break:break-all; /*只对英文起作用 ...

  10. jersery+jetty嵌入式restful的框架开发

    随着微服务的流程,越来越多的后台服务采用了restful api风格的开放API,jersery+jetty嵌入式变成了一个很好的选择, 我自己写了一个简单的框架,https://github.com ...