通过在 SQL for JOIN 中转换为整数类型来提高性能?



假设我有Table_A(~50m行)有一列,比如ColA,它是INTEGER类型。我也有Table_BColB(~30m 行),它是VARCHAR类型,但该列仅由数字 ID 组成(例如,'12345')。假设我想加入这些表,如下所示:

SELECT *
FROM Table_A AS a
INNER JOIN Table_B AS b
ON a.ColA = b.ColB

有人告诉我,使用INTEGERJOIN通常比使用VARCHAR列更快。但是通读StackOverflow和通过Google找到的其他资源并没有帮助我得出任何关于这个问题的结论(例如,1,2和3)。

我的问题是:

  1. 在联接这两个表之前,我是否应该将ColB列类型更改为INTEGER?这会提高联接性能吗?
  2. 假设我决定将ColA转换为VARCHAR,最佳做法是将其宽度/大小限制为尽可能小,还是VARCHAR列的大小/宽度在 JOIN 性能中很重要?
  3. 哪些工具(除了计算query_end_time - query_tart_time)可以帮助我说明SQL Server中的查询性能改进(如果有的话)?

提前感谢您对上述任何问题的回答/建议!

应将数字的字符串表示形式转换为数字。 您的推荐信不合适,原因有两个:

  1. 他们似乎更专注于MySQL(尽管这并不重要)。
  2. 他们谈论主键,而不是联接。

我知道没有参考资料会说与不同类型的连接是一个好主意。 在某些情况下可能无关紧要,但您应该确定单个类型,并且数字比字符串更好:

  • 数字的大小是固定的。 字符串的大小各不相同。 这给索引和比较操作增加了一点开销。 没什么大不了的,但如果有选择,请坚持使用更好的。

  • 数据类型的混合可能会妨碍索引的使用。

  • 数据类型的混合需要对每个比较进行转换操作。
  • 数字和字符串的优化器统计信息可能无法直接比较(取决于优化器)。
  • 如果类型不同,则不能声明外键关系。

所以,坚持相同的类型。 这是最重要的。 整数比字符串好一点,所以使用它。

最新更新