sqlserver 多表关联时在where语句中慎用trim()方法_MsSql

类似如下:

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语句速度了。

时间: 2024-07-30 19:23:39

sqlserver 多表关联时在where语句中慎用trim()方法_MsSql的相关文章

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) 但是,在上

wfs-ogr在连接数据源之后,执行ExcuteSQL()方法时,sql语句中含有中文的语法规范?

问题描述 ogr在连接数据源之后,执行ExcuteSQL()方法时,sql语句中含有中文的语法规范? 使用C#调用OGR类库 数据源:将shp文件使用geoserver发布成wfs服务,利用ogr提供的wfs驱动进行调用: 使用的方法:连接wfs服务之后,调用datasource类中的ExcuteSQL(string strsql)方法 问题:当执行的sql语句中含有中文时,则会报语法错误:eg:select * from ceshi where 编码='abc',有大神使用ogr调用wfs服务

mysql 多表关联更新/删除sql语句

1.mysql 多表关联delete中使用别名,tblwenhq是真实的表名,a是tblwenhq的别名,b是另一个表名  代码如下 复制代码 DELETE  a FROM tblwenhq a,b where a.id=b.id 2.使用mysql进行delete from操作时,若子查询的 FROM 字句和更新/删除对象使用同一张表,会出现错误. DELETE FROM tab1 WHERE col1 = ( SELECT MAX( col1 ) FROM tab1 ); ERROR 109

sql 语句中的 NULL值_MsSql

今天写了这样的代码 复制代码 代码如下: DECLARE @atr NVARCHAR(20) SET @atr = NULL IF(@atr = NULL) BEGIN PRINT 1 END 原本是想打印出1的.但是没有. 把 代码修改成如下: DECLARE @atr NVARCHAR(20) SET @atr = NULL IF(@atr IS NULL) BEGIN PRINT 1 END 这样就正确打印出1了. 然后自己有做了如下的修改,把if语句修改成 复制代码 代码如下: IF(N

mysql 3个表关联时查询时的优化

问题描述 一共三张表tips,tippings,comments.tippings 是中间表.tips 和 comments 是多对多的关系.tips只有两列:id,nametippings 的create语句:CREATE TABLE `tippings` (`id` INT(11) NOT NULL AUTO_INCREMENT,`tip_id` INT(11) NULL DEFAULT NULL,`tippable_id` INT(11) NULL DEFAULT NULL,`tipper

MySql多表关联Update更新sql语句

对单表执行更新没有什么好说的,无非就是update table_name set col1 = xx,col2 = yy where col = zz,主要就是where条件的设置.有时候更新某个表可能会涉及到多张数据表,例如:  代码如下 复制代码 update table_1 set score = score + 5 where uid in (select uid from table_2 where sid = 10); 其实update也可以用到left join.inner joi

在SQLServer上查看SQL语句的执行时间的方法_MsSql

1:下面这种是比较简单的查询方法,通过查询前的时间和查询后的时间差来计算的 复制代码 代码如下: declare @begin_date datetime declare @end_date datetime select @begin_date = getdate() <这里写上你的语句...> select @end_date = getdate() select datediff(ms,@begin_date,@end_date) as '用时/毫秒' 2:下面这种方法比较全面,将执行每

多表关联同时更新多条不同的记录方法分享_MsSql

以下为测试例子. 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中的年龄更新到相应的#t

多表关联同时更新多条不同的记录方法分享

以下为测试例子. 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中的年龄更新到相应的#temptes