sql >> Databasteknik >  >> RDS >> Mysql

Prestanda för MYSQL IN

Utgående från ett visst antal poster, IN predikat över en SELECT blir snabbare än så över en lista med konstanter.

Se den här artikeln i min blogg för jämförelse av prestanda:

Om kolumnen som används i frågan i IN sats indexeras, så här:

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

, då är den här frågan bara optimerad till en EXISTS (som använder endast en post för varje post från table1 )

Tyvärr, MySQL är inte kapabel att göra HASH SEMI JOIN eller MERGE SEMI JOIN som är ännu mer effektiva (särskilt om båda kolumnerna är indexerade).



  1. Konstruera en datamodell för ett parkeringshanteringssystem

  2. Introduktion till OPENJSON med exempel (SQL-server)

  3. Skillnaden mellan läs commited och repeterbar läsning

  4. foreach loop:Använder alla kärnor i R (särskilt om vi skickar sql-frågor inuti foreach loop)