sql >> Databasteknik >  >> RDS >> Mysql

När ska STRAIGHT_JOIN användas med MySQL

Jag skulle inte rekommendera att använda STRAIGHT_JOIN utan en bra anledning. Min egen erfarenhet är att MySQL-frågeoptimeraren väljer en dålig frågeplan oftare än jag skulle vilja, men inte tillräckligt ofta för att du bara ska kringgå den i allmänhet, vilket är vad du skulle göra om du alltid använde STRAIGHT_JOIN.

Min rekommendation är att lämna alla frågor som vanliga JOINs. Om du upptäcker att en fråga använder en suboptimal frågeplan, skulle jag föreslå att du först försöker skriva om eller strukturera om frågan lite för att se om optimeraren sedan kommer att välja en bättre frågeplan. Se också till, åtminstone för innodb, att det inte bara är så att din indexstatistik är inaktuell (ANALYSERA TABELL ). Det kan få optimeraren att välja en dålig frågeplan. Optimeringstips bör i allmänhet vara din sista utväg.

En annan anledning till att inte använda frågetips är att din datadistribution kan förändras över tiden, eller att din indexselektivitet kan ändras, etc. när din tabell växer. Dina frågetips som är optimala nu kan bli suboptimala med tiden. Men optimeraren kommer inte att kunna anpassa frågeplanen på grund av dina nu föråldrade tips. Du förblir mer flexibel om du låter optimeraren fatta besluten.



  1. Hur många databasindex är för många?

  2. Kartlägg ett PostGIS-geometripunktfält med Hibernate on Spring Boot

  3. Hur använder jag Postgres JSONB datatype med JPA?

  4. Jämför datum i T-SQL, ignorera tidsdelen