美文网首页
两个字段类型不同的表join在一起会产生多余的性能开销

两个字段类型不同的表join在一起会产生多余的性能开销

作者: 小狼在IT | 来源:发表于2018-06-30 10:59 被阅读0次

第一部分
两个表字段类型一样时:
LOGISTICS:


image.png

LOGISTICS_SON:


image.png

此时进行两个表的inner join

SELECT * FROM LOGISTICS l
inner  join LOGISTICS_SON s on s.transorder=l.transorder
image.png

第二部分
现在将LOGISTICS表的transorder改成varchar类型:


image.png

再执行查询:


image.png

这是一个性能的损耗。


但是呢,利用它的这个“特性”,可以做点鸡贼的事(虽然一般用不上,看你的数据库是不是自作聪明地将原本应该“哈希匹配”的,做成了“嵌套循环”了)。
比如当两个表的数据类型相同的时候(如第一部分)
使用这种强制改变执行计划的语句,会报错:


image.png

然而,利用字段类型不同,sql server会执行“计算标量”的特性(此时数据表改回第二部分):


image.png

此时能够执行成功,原因是在hash join之前,列已经是“计算标量”了。
注意,此时必须是 l.transorder='XXX' ,而不能是 s.transorder='XXX' 。

相关文章

  • 两个字段类型不同的表join在一起会产生多余的性能开销

    第一部分两个表字段类型一样时:LOGISTICS: LOGISTICS_SON: 此时进行两个表的inner jo...

  • SQL-Join连接、UNION 和 UNION ALL

    Join SQL-JOIN 基于多表间的共通字段,把两个或多个表的行结合起来。常见的 JOIN 类型:SQL IN...

  • sql中join的用法

    SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。 最常见的 JOIN 类型:S...

  • SQL之各种连接Join详解

    SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。 最常见的 JOIN 类型:I...

  • 字段类型和输入控件

    设置不同的字段类型,会有不同的输入和展示方式。数据表设计视图,打开企业表,点击名称 字段的 类型 ,弹出字段类型配...

  • left join 和right join的区别

    left join 会查询出左表所有的数据,以及右表能连接上的字段right join 会查询出右表所有的数据,以...

  • SQL Join

    SQL join 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。 INNER JOIN:如果表...

  • sqlzoo练习10-join quiz

    Join opetation指的是不同的表之间通过某个相同的字段进行关联,从而进行查询操作。本文是对Join操作的...

  • 链接查询

    内连接: 基本语法: 左表 [inner] join 右表 on 左表.字段 = 右表.字段;...

  • MySQL优化层面

    (2)、从系统层面增强mysql的性能:优化数据表结构、字段类型、字段索引、分表,分库、读写分离等等。 (3)、从...

网友评论

      本文标题:两个字段类型不同的表join在一起会产生多余的性能开销

      本文链接:https://www.haomeiwen.com/subject/bwktuftx.html