sqlserver 多表关联时在where语句中慎用trim()方法
类似如下:
select A.key,B.key,C.key from A,B,C where trim(A.key)=trim(B.fk) and trim(A.col)=trim(C.pk)。
在主表A(200多条记录)关联附表B(4万多条记录)时用了1秒钟时间,该值在不同机器执行可能有所差异,但比不加trim速度稍微慢一些,但是不是特别明显。
其sql语句类似如下:
select A.key,B.key from A,B where trim(A.key)=trim(B.fk)
但是,在上面sql语句中加入第三个表C(两条记录)后,Sql语句如下:
select A.key,B.key,C.key from A,B,C where trim(A.key)=trim(B.fk) and trim(A.col)=trim(C.pk)
整个sql语句执行了差不多70多秒钟。比不加trim()方法多发费了60夺秒。
后来,通过若干实验发现这种where中多表关联条件,如果不在左边关联条件处加trim()方法即可达到基本等同于一般多表关联的效率。
改良后的sql语句如下:
select A.key,B.key,C.key from A,B,C where A.key=trim(B.fk) and A.col=trim(C.pk)
此条sql语句执行效率基本等同于where语句中无trim()的sql语句速度了。
相关推荐
-
解析在MYSQL语法中使用trim函数删除两侧字符
在实际开发中,你总是会遇到这种情况 或者遇到这种情况 数据多了也会令你抓狂,如果还在用select fields from table where like '/%' 绝对是一个吃力不讨好的做法,那么,仔细研究MYSQL自带函数那绝对是首要工作.我第一时间就是想到,PHP函数中的trim是不是也可能用到mysql中呢,回答是肯定的.你可以从MYSQL手册中找到,当然,你可以百度一下,我下面说的与前人相同.SELECT *,trim(LEADING '/' FROM `path`) as path
-
sqlServer实现去除字符串空格
说起去除字符串首尾空格大家肯定第一个想到trim()函数,不过在sqlserver中是没有这个函数的,却而代之的是ltrim()和rtrim()两个函数.看到名字所有人都 知道做什么用的了,ltrim()去除字符串左边的空格,rtrim()去除字符串右边的空格,要去除首尾空格同时使用这个两个函数就好了. 测试: select ltrim(' test ') --去除左边的空格 select rtrim(' test ') --去除右边的空格 select ltrim(rtrim(' test '
-
mysql 强大的trim() 函数
mysql中的去除左空格函数: LTRIM(str) Returns the string str with leading space characters removed. 以下是代码片段: 复制代码 代码如下: mysql> SELECT LTRIM(' barbar'); -> 'barbar' This function is multi-byte safe. mysql中的去除右空格函数: RTRIM(str) Returns the string str with trailin
-
sqlserver 多表关联时在where语句中慎用trim()方法
类似如下: select A.key,B.key,C.key from A,B,C where trim(A.key)=trim(B.fk) and trim(A.col)=trim(C.pk). 在主表A(200多条记录)关联附表B(4万多条记录)时用了1秒钟时间,该值在不同机器执行可能有所差异,但比不加trim速度稍微慢一些,但是不是特别明显. 其sql语句类似如下: select A.key,B.key from A,B where trim(A.key)=trim(B.fk) 但是,在上
-
利用带关联子查询Update语句更新数据的方法
Update是T-sql中再简单不过的语句了,update table set column=expression [where condition],我们都会用到.但update的用法不仅于此,真正在开发的时候,灵活恰当地使用update可以达到事半功倍的效果. 假定有表Table1(a,b,c)和Table2(a,c),现在Table1中有些记录字段c为null,要根据字段a在Table2中查找,取出字段a相等的字段c的值来更新Table1.一种常规的思路,通过游标遍历Table1中字段c为
-
多表关联同时更新多条不同的记录方法分享
以下为测试例子. 1.首先创建两张临时表并录入测试数据: 复制代码 代码如下: create table #temptest1 ( id int, name1 varchar(50), age int ) create table #temptest2 ( id int, name1 varchar(50), age int ) 查询出此时的表数据为: #temptest1 #temptest2 2.现在要将#temptest2中的年龄更新到相应的#tem
-
正则表达式语句中的注释方法分享
小括号的另一种用途是通过语法(?#comment)来包含注释. 例如:2[0-4]\d(?#200-249)|25[0-5](?#250-255)|[01]?\d\d?(?#0-199). 要包含注释的话,最好是启用"忽略模式里的空白符"选项,这样在编写表达式时能任意的添加空格,Tab,换行,而实际使用时这些都将被忽略.启用这个选项后,在#后面到这一行结束的所有文本都将被当成注释忽略掉.例如,我们可以前面的一个表达式写成这样: (?<= # 断言要匹配的文本的前缀 <(\w
-
Mysql多表关联更新方式
目录 Mysql多表关联更新 Mysql多表关联update 总结 Mysql多表关联更新 日常的开发中一般都是写的单表update语句,很少写多表关联的update. 在MySQL中我们有几种方法可以做到多表关联更新: 在两张表之间做关联,可以更新关联的多张表 update biao1,表2 set 表1.列名=表2.列名 --外键或关联字段 where 更新条件:--例如:表1.列名=表2.列名,或字段aa>1等等 通过 INNER JOIN,可以更新关联的多张表 update 表1 i
-
sqlserver锁表、解锁、查看销表的方法
锁定数据库的一个表 复制代码 代码如下: SELECT * FROM table WITH (HOLDLOCK) 注意: 锁定数据库的一个表的区别 复制代码 代码如下: SELECT * FROM table WITH (HOLDLOCK) 其他事务可以读取表,但不能更新删除 复制代码 代码如下: SELECT * FROM table WITH (TABLOCKX) 其他事务不能读取表,更新和删除 SELECT 语句中"加锁选项"的功能说明 SQL Server提供了强大而完备的锁机
-
Django 多表关联 存储 使用方法详解 ManyToManyField save
当models中使用ManyToManyField进行多表关联的时候,需要使用字段的add()方法来增加关联关系的一条记录,让两个实例关联起来才能顺利保存关联关系 #models.py 问题分类question_category和类别使用了多对多关系(先不管是否合理) #coding:utf-8 from django.db import models # Create your models here. class QuestionCategory(models.Model): categor
-
SQL语句中JOIN的用法场景分析
记录:256 写SQL最高境界:SELECT * FROM 表名.当然这是一句自嘲.探究一下SQL语句中JOIN的用法,直到经历这个场景,变得想验证一下究竟. 一.场景 把关系型数据库A中表TEST_TB01和TEST_TB02迁移到大数据平台M(MaxCompute大数据平台).TEST_TB01单表1000万条记录,TEST_TB02单表80万条记录. 在关系型数据库中,TEST_TB01和TEST_TB02中有主键约束.在产生新增业务数据时,不会存在重复数据插入.但是,当数据迁移到大数据平
-
SQL语句中EXISTS的详细用法大全
目录 前言 一.建表 二.在SELECT语句中使用EXISTS 1.在SQL中使用EXISTS 2.在SQL中使用NOT EXISTS 3.在SQL中使用多个NOT EXISTS 4.在SQL中使用多个EXISTS 5.在SQL中使用NOT EXISTS和EXISTS 三.在DELETE语句中使用EXISTS 1.在MySQL中使用 2.在Oracle中使用 四.在UPDATE语句中使用EXISTS 1.在MySQL中使用 2.在Oracle中使用 总结 前言 在业务开展中,会遇到类似需求. 需
-
SqlServer 查询时日期格式化语句
SQL Server中文版的默认的日期字段datetime格式是yyyy-mm-dd Thh:mm:ss.mmm 例如: select getdate() 2004-09-12 11:06:08.177 整理了一下SQL Server里面可能经常会用到的日期格式转换方法: 举例如下: select CONVERT(varchar, getdate(), 120 ) 2004-09-12 11:06:08 select replace(replace(replace(CONVERT(varchar
随机推荐
- Angularjs中UI Router全攻略
- Golang利用自定义模板发送邮件的方法详解
- PowerShell一次打开多个文件的方法
- php redis扩展支持scan命令实现方法
- RAC cache fusion机制实现原理分析
- 读写xml所有节点个人小结 和 读取xml节点的数据总结
- 浅谈js中字符和数组一些基本算法题
- VS2017做为Unity3D的脚本编辑器需要的最精简组件
- C#通过POP3获取邮件的代码(正文和附件)
- PHP+jquery实时显示网站在线人数的方法
- Python中的模块导入和读取键盘输入的方法
- java+sql2005 随机抽取试题的代码
- Android App后台服务报告工作状态实例
- Windows系统下安装Mongodb 3.2.x的步骤详解
- MyBatis配置文件的写法和简单使用
- require简单实现单页应用程序(SPA)
- 区分中英文字符的两种方法(正则和charCodeAt())
- 详解Java中的迭代迭代器Iterator与枚举器Enumeration
- C#向图片添加水印的两种不同场景与解决方法
- C#中数组、ArrayList和List三者的区别详解及实例