sql >> Databasteknik >  >> RDS >> Mysql

SQL IN-satsen är långsammare än enskilda frågor

Detta är en känd brist i MySQL.

Det är ofta sant att använda UNION presterar bättre än en intervallfråga som den du visar. MySQL använder inte index särskilt intelligent för uttryck som använder IN (...) . Ett liknande hål finns i optimeraren för booleska uttryck med OR .

Se http ://www.mysqlperformanceblog.com/2006/08/10/using-union-to-implement-loose-index-scan-to-mysql/ för lite förklaring och detaljerade riktmärken.

Optimizern förbättras hela tiden. En brist i en version av MySQL kan förbättras i en efterföljande version. Så det är värt att testa dina frågor på olika versioner.

Det är också fördelaktigt att använda UNION ALL istället för bara UNION . Båda frågorna använder en temporär tabell för att lagra resultat, men skillnaden är att UNION tillämpar DISTINCT till resultatuppsättningen, vilket medför en extra oindexerad sortering.



  1. Hur kopierar eller importerar jag Oracle-scheman mellan två olika databaser på olika servrar?

  2. långsam räkning(*) på innoDB

  3. Hur ansluter man Postgres till localhost-servern med pgAdmin på Ubuntu?

  4. MYSQL Beställ från ett annat bord