Unterabfragen mit EXISTS vs IN - MySQL

Unten sind zwei Abfragen Unterabfragen. Beide sind gleich und beide funktionieren gut für mich. Das Problem ist jedoch, dass die Ausführung der Abfrage von Methode 1 etwa 10 Sekunden dauert, während die Abfrage von Methode 2 weniger als 1 Sekunde dauert.

Ich konnte die Abfrage von Methode 1 in Methode 2 konvertieren, verstehe jedoch nicht, was in der Abfrage vor sich geht. Ich habe versucht, es selbst herauszufinden. Ich möchte wirklich erfahren, was der Unterschied zwischen den beiden folgenden Abfragen ist und wie der Leistungszuwachs erfolgt. Was ist die Logik dahinter?

Ich bin neu in diesen fortgeschrittenen Techniken. Ich hoffe, jemand hilft mir hier raus. Da ich das gelesen habedocs das gibt mir keinen hinweis.

Methode 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 
         )
   )

Methode 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
         )                                             
   )

Antworten auf die Frage(5)

Ihre Antwort auf die Frage