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

SQL IN-sætning langsommere end individuelle forespørgsler

Dette er en kendt mangel i MySQL.

Det er ofte rigtigt at bruge UNION yder bedre end en intervalforespørgsel som den, du viser. MySQL anvender ikke indekser særlig intelligent til udtryk, der bruger IN (...) . Et lignende hul findes i optimeringsværktøjet til booleske udtryk med OR .

Se http ://www.mysqlperformanceblog.com/2006/08/10/using-union-to-implement-loose-index-scan-to-mysql/ for nogle forklaringer og detaljerede benchmarks.

Optimizeren bliver hele tiden forbedret. En mangel i én version af MySQL kan blive forbedret i en efterfølgende version. Så det er værd at teste dine forespørgsler på forskellige versioner.

Det er også fordelagtigt at bruge UNION ALL i stedet for blot UNION . Begge forespørgsler bruger en midlertidig tabel til at gemme resultater, men forskellen er, at UNION anvender DISTINCT til resultatsættet, hvilket medfører en ekstra ikke-indekseret sortering.



  1. Behold specialtegn, når du importerer til mysql fra csv

  2. Hvordan jeg gemmer og henter et billede på min server i en java webapp

  3. Hvordan tilføjes indledende nul i et tal i Oracle SQL-forespørgsel?

  4. Kan ikke oprette forbindelse til lokal MySQL-server gennem socket '/tmp/mysql.sock' (2)