sql >> Database >  >> RDS >> Mysql

SQL IN-clausule langzamer dan afzonderlijke query's

Dit is een bekende tekortkoming in MySQL.

Het is vaak waar dat het gebruik van UNION presteert beter dan een bereikquery zoals degene die u laat zien. MySQL gebruikt indexen niet erg intelligent voor uitdrukkingen die IN (...) gebruiken . Een soortgelijk gat bestaat in de optimalisatie voor booleaanse uitdrukkingen met OR .

Zie http ://www.mysqlperformanceblog.com/2006/08/10/using-union-to-implement-loose-index-scan-to-mysql/ voor wat uitleg en gedetailleerde benchmarks.

De optimizer wordt voortdurend verbeterd. Een tekortkoming in de ene versie van MySQL kan in een volgende versie worden verbeterd. Het is dus de moeite waard om uw zoekopdrachten op verschillende versies te testen.

Het is ook voordelig om UNION ALL . te gebruiken in plaats van gewoon UNION . Beide query's gebruiken een tijdelijke tabel om resultaten op te slaan, maar het verschil is dat UNION geldt DISTINCT naar de resultatenset, wat een extra niet-geïndexeerde sortering met zich meebrengt.



  1. Hoe database te herstellen met RMAN

  2. Maak een nieuwe tabel vanuit de magento-module

  3. Mysql SELECT binnen UPDATE

  4. Verkrijg het aantal dagen tussen twee datums in Oracle, inclusief de datums