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

Hvornår skal du bruge STRAIGHT_JOIN med MySQL

Jeg vil ikke anbefale at bruge STRAIGHT_JOIN uden en god grund. Min egen erfaring er, at MySQL-forespørgselsoptimeringsværktøjet vælger en dårlig forespørgselsplan oftere, end jeg gerne vil, men ikke ofte nok til, at du bare skal omgå den generelt, hvilket er hvad du ville gøre, hvis du altid brugte STRAIGHT_JOIN.

Min anbefaling er at lade alle forespørgsler være almindelige JOINs. Hvis du opdager, at en forespørgsel bruger en suboptimal forespørgselsplan, vil jeg foreslå, at du først prøver at omskrive eller omstrukturere forespørgslen lidt for at se, om optimeringsværktøjet derefter vil vælge en bedre forespørgselsplan. Sørg også for i det mindste for innodb, at det ikke kun er, at dine indeksstatistikker er forældede (ANALYSE TABEL ). Det kan få optimeringsværktøjet til at vælge en dårlig forespørgselsplan. Optimeringstip bør generelt være din sidste udvej.

En anden grund til ikke at bruge forespørgselstip er, at din datadistribution kan ændre sig over tid, eller din indeksselektivitet kan ændre sig osv., efterhånden som din tabel vokser. Dine forespørgselstip, der er optimale nu, kan blive suboptimale over tid. Men optimeringsværktøjet vil ikke være i stand til at tilpasse forespørgselsplanen på grund af dine nu forældede tip. Du forbliver mere fleksibel, hvis du lader optimeringsværktøjet tage beslutningerne.



  1. Hvordan parametriserer jeg en nul-streng med DBNull.Value klart og hurtigt

  2. ændre størrelsen på datatype i sql

  3. Hvordan konverterer man et helt MySQL-databasetegnsæt og sortering til UTF-8?

  4. Hvordan begrænser jeg antallet af rækker, der returneres af en Oracle-forespørgsel efter bestilling?