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

Performance gain by converting to INTEGER type in SQL for JOIN?

假设我有 Table_A(约 5000 万行)和一个列,例如 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

有人告诉我 JOIN 使用 INTEGER 列通常比使用 VARCHAR 列更快。但是通读 Whosebug 和通过 Google 找到的其他资源并没有帮助我就此事得出任何结论(例如,1, 2 and 3)。

我的问题是:

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

预先感谢您 answers/suggestions 对上述任何问题的回答!

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

  1. 他们似乎更关注 MySQL(尽管这无关紧要)。
  2. 他们谈论主键,而不是连接。

据我所知,没有任何参考文献表明使用不同类型进行联接是个好主意。可能在某些情况下无关紧要,但您应该选择单一类型并且数字优于字符串:

  • 一个数字是固定大小的。字符串大小不一。这会为索引和比较操作增加一点开销。没什么大不了的,但如果你有选择的话,坚持选择更好的那个。

  • 混合数据类型可以排除索引的使用。

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

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