Есть ли разница в производительности между этими тремя запросами? - PullRequest
1 голос
/ 07 августа 2020

У меня есть две таблицы t1 и t2, как показано ниже:

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;

Теперь мне интересно, какой из них имеет лучшую производительность запросов, предположим, что версия MySQL - 5.1 (также имеет ли это какое-то отношение к версия?), заранее спасибо!

Я сам протестировал, и я обнаружил, что это связано с размером данных, другой размер даст другой результат, поэтому я спрашиваю его здесь

1 Ответ

0 голосов
/ 07 августа 2020

Я не уверен в производительности, но последний вариант лучше, поскольку большая часть базы данных имеет ограничение в x элементов в IN CLAUSE. Я думаю, что он тоже самый быстрый, но лучше протестировать, чтобы подтвердить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...