【发布时间】:2016-03-22 08:27:17
【问题描述】:
让我们考虑一下这种奇怪的情况,
索引冗余的地方。
TableA (item_id, code_key, data01, ... data0n)
TableB (item_id, code_key, dataA1, ... dataAn)
item_id 和 code_key 都是唯一的,它们可以是两个表中的主键。 item_id 或 code_key 可以从两个表中删除而不会丢失任何引用/关系。
我知道这是多余的,但这不是问题的重点。 考虑一下,两列都被索引了。
Item_id 是 INT,codeKey 是 VARCHAR(100)。
有人建议这样查询更好:
select * from TableA INNER JOIN TableB USING(item_id)
而不是:
select * from TableA INNER JOIN TableB USING(code_key)
我看不出它的意义,因为两列都被索引并且性能是一样的......不是吗?
在 ON 子句中使用 INT 是否会比使用 VARCHAR 更快?即使它们都已编入索引?
【问题讨论】:
-
在性能方面,差异可以忽略不计 - 除了非常大的数据集。关键因素是codekey在特定情况下能否改变,
-
与其他问题相反,您的评论与我的想法一致。 Code_key 被插入并且永远不会像 item_id 一样改变。我认为 Mysql 在幕后对这些列进行了索引,因此尽管它们的声明类型不同,但在诸如搜索或连接之类的操作上,它们将具有相同的性能基准测试......
-
一个房间里有 100 个人。用数字 1 - 100 还是用他们的名字和姓氏更容易记住和称呼他们?这就是你的答案。
标签: mysql performance inner-join