关于TRIM的优化技巧
来源:互联网 发布:新昌驾校知费 编辑:程序博客网 时间:2024/05/16 14:08
背景
今天在论坛中,看到有人在问一个千万级别表查询的优化。一个简单的查询几分钟。语句如下
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的优化技巧
- 关于TRIM的优化技巧
- 关于java的trim
- 关于js的trim问题
- 关于ie的兼容性trim
- 关于String.trim()的思考
- 关于SEO优化文章的几种小技巧
- 关于sql优化的一些小技巧
- 关于图片加载优化的小技巧
- 关于Trim
- 关于指针的使用---trim函数
- 关于ltrim,rtrim,和trim的用法
- 【JS】关于trim函数的小tips
- Android中的TRIM优化
- grep的小技巧 空行,注释以及trim
- 关于SharePoint页面速度优化的一个小技巧
- 关于网页优化的20个基本技巧
- 关于客户端Javascript性能优化的12个小技巧
- web.xml 中元素加载顺序及其详解
- Java Web开发环境搭建
- Java中switch理解
- N的阶乘 mod M(同余)
- myeclipse生成HTML格式的API帮助文档实例
- 关于TRIM的优化技巧
- Linux VMware Tools安装步骤简易版
- oracle的学习之表空间
- C++(1):文件和流
- Mybatis第六篇【配置文件和映射文件再解读、占位符、主键生成与获取、Mapper代理】
- JS和JQuery在运用时的基础区别
- MySql 存储过程 [Err] 1270
- UVA10048-Audiophobia-最短路
- JS穷举方法