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

时间: 2024-10-24 15:48:35

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

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

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

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

多表关联同时更新多条不同的记录方法分享_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

sqlserver 多表更新/关联更新update详解

反复尝试多次,最后得出结论,sqlserver 多表关联update 时,外部的表 不能加 as 别名,会报语法错误. 只可以写 表名做前缀来引用 不能 用别名 引用. 语法可以参考下面 update A SET 字段1=B表字段表达式, 字段2=B表字段表达式   from B WHERE    逻辑表达式 例如:  代码如下 复制代码 UPDATE dbo.Table2 SET dbo.Table2.ColB = dbo.Table2.ColB + dbo.Table1.ColB FROM

如何应付表数据过大的查询问题?(如何尽量避免大表关联)

原文:如何应付表数据过大的查询问题?(如何尽量避免大表关联)      一般来说,对于做B/S架构的朋友来说,更有机会遇到高并发的数据库访问情况,因为现在WEB的普及速度就像火箭升空,同时就会因为高访问量带来一系列性能问题,而数据库一直是用户与商人之间交流的重要平台.用户是没有耐心忍受一个查询需要用上10秒以上的,或者更少些,如果经常出现服务器死机或者是报查询超时,我想那将是失败的项目.做了几年的WEB工作,不才,一直没有遇到过大访问量或者是海量数据的情况.这里并不是说没有海量数据的项目就不是好