当前位置:   article > 正文

sqlserver 关于LOWER、UPPER、TRIM的优化技巧_sqlseever关于lower,upper,trim的优化技巧

sqlseever关于lower,upper,trim的优化技巧

数据库中看到一个慢sql

SELECT
[Distinct1].[id] AS [id]
FROM ( SELECT DISTINCT
[tmp1].[id] AS [id]
FROM [dbo].[Orders] AS [tmp1]
WHERE (LOWER([tmp1].[IGid]) IN (N'das-8hda9',N'cf51-9fg5'....)
AND ([tmp1].[Flag] = 1)
) AS [Distinct1]

查看数据库排序规则为 Chinese_PRC_CI_ASCI意味着大小写不敏感

以下两个语句查出的数据是一样的:

select * from [BC] where [ProductCode]='AB.CD.E'

select * from [BC] where [ProductCode]='ab.cd.e'

因此慢sql中的lower转换是多余的,由于在索引字段使用函数还使得index seek变为了index scan,降低了效率

---------------------------------------------

下面是以下博客看到的

关于TRIM的优化技巧 - owen zeng - 博客园

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/856255
推荐阅读
相关标签
  

闽ICP备14008679号