首页 > 解决方案 > 这三个查询之间是否有任何性能差异

问题描述

我有两张桌子t1t2如下所示:

create table t1(
  id int primary key,
  name varchar(10),
  desc varchar(500)
);

create table t2(
  id int primary key,
  tid int foreign key references t1(id),
  code varchar(10)
);

现在我想从t1其中有相关记录的地方查询一些数据t2,所以我写了以下三个查询:

-- query1,using in with hard code inside it,n might be more than 100
SELECT * FROM t1 WHERE id IN(tid1,tid2,....tidn);

-- query2,using in with subquery 
SELECT * FROM t1 WHERE id IN(SELECT tid FROM t2);

-- query3,using join
SELECT t1.* FROM t1 JOIN t2 ON t1.id=t2.tid;

现在我想知道哪个查询性能最好,假设版本MySQL5.1(也是与版本有关吗?),提前谢谢!

我自己测试过,我发现它与数据大小有关,不同的大小会给出不同的结果,所以我在这里问

标签: mysql

解决方案


我不确定性能,但最后一个更好,因为大多数数据库在 IN CLAUSE 中有 x 元素的限制。我认为它也是最快的,但最好通过测试来确认。


推荐阅读