Mysql
 sql >> Database >  >> RDS >> Mysql

Prestazioni di MySQL IN

A partire da un certo numero di record, il IN predicato su un SELECT diventa più veloce di quello su un elenco di costanti.

Vedi questo articolo nel mio blog per il confronto delle prestazioni:

Se la colonna utilizzata nella query in IN la clausola è indicizzata, in questo modo:

SELECT  *
FROM    table1
WHERE   unindexed_column IN
        (
        SELECT  indexed_column
        FROM    table2
        )

, quindi questa query è solo ottimizzata per un EXISTS (che usa solo una voce per ogni record da table1 )

Sfortunatamente, MySQL non è in grado di eseguire HASH SEMI JOIN o MERGE SEMI JOIN che sono ancora più efficienti (soprattutto se entrambe le colonne sono indicizzate).