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

Hvorfor forbedrer STRAIGHT_JOIN denne forespørgsel så drastisk, og hvad betyder det, når den er skrevet efter søgeordet SELECT?

STRAIGHT_JOIN tvinger sammenkædningsrækkefølgen af ​​tabellerne, så table1 scannes i den ydre sløjfe og table2 i den indre løkke.

Optimizeren er ikke perfekt (selv om den stadig er ret anstændig), og den mest sandsynlige årsag er de forældede statistikker.

Nej, kun når optimeringsværktøjet er forkert. Dette kan være, hvis din datafordeling er alvorligt skæv eller ikke kan beregnes korrekt (f.eks. for rumlige eller fuldtekstindekser).

Du bør indsamle statistikken, bygge planerne for begge veje og forstå, hvad disse planer betyder.

Hvis du ser det:

  1. Den automatisk genererede plan er ikke optimal og kan ikke forbedres på standardmåderne,

  2. STRAIGHT_JOIN version er bedre, du forstår det altid og forstår hvorfor det vil det altid

, og brug derefter STRAIGHT_JOIN .




  1. small_case_table_names Indstillinger i MySQL 8.0.12

  2. SQLite gruppe af

  3. Sådan sender du ArrayList<> som IN-klausul i SQL-forespørgsel i MySQL

  4. Vis tabeller i SQLite-databasen i Python