Подзапросы с EXISTS vs IN - MySQL
Ниже два запроса являются подзапросами. Оба одинаковы и оба прекрасно работают для меня. Но проблема в том, что запрос метода 1 занимает около 10 секунд, а запрос метода 2 - менее 1 секунды.
Я был в состоянии преобразовать запрос метода 1 в метод 2, но я нене понимаю, чтопроисходит в запросе. Я пытался понять это сам. Я бы очень хотел узнать, чтоРазница между приведенными ниже двумя запросами и как происходит повышение производительности? какие'логика за этим стоит?
Я новичок в этих передовых методах. Я надеюсь, что кто-то поможет мне здесь. Учитывая, что я прочиталдокументы который не дает мне подсказку.
Способ 1:
SELECT
*
FROM
tracker
WHERE
reservation_id IN (
SELECT
reservation_id
FROM
tracker
GROUP BY
reservation_id
HAVING
(
method = 1
AND type = 0
AND Count(*) > 1
)
OR (
method = 1
AND type = 1
AND Count(*) > 1
)
OR (
method = 2
AND type = 2
AND Count(*) > 0
)
OR (
method = 3
AND type = 0
AND Count(*) > 0
)
OR (
method = 3
AND type = 1
AND Count(*) > 1
)
OR (
method = 3
AND type = 3
AND Count(*) > 0
)
)
Способ 2:
SELECT
*
FROM
`tracker` t
WHERE
EXISTS (
SELECT
reservation_id
FROM
`tracker` t3
WHERE
t3.reservation_id = t.reservation_id
GROUP BY
reservation_id
HAVING
(
METHOD = 1
AND TYPE = 0
AND COUNT(*) > 1
)
OR
(
METHOD = 1
AND TYPE = 1
AND COUNT(*) > 1
)
OR
(
METHOD = 2
AND TYPE = 2
AND COUNT(*) > 0
)
OR
(
METHOD = 3
AND TYPE = 0
AND COUNT(*) > 0
)
OR
(
METHOD = 3
AND TYPE = 1
AND COUNT(*) > 1
)
OR
(
METHOD = 3
AND TYPE = 3
AND COUNT(*) > 0
)
)