sql >> Databasteknik >  >> RDS >> Mysql

WHERE-klausul följt av JOIN

Jag tror att du missar syntaxen för SQL för flödet av exekvering som utförs av RDBMS-motorn:den här frågan

SELECT a,b FROM big b
LEFT JOIN (SELECT b as small_b,c,d FROM small) ON big.b=small.small_b
WHERE b.foo='bar'

kommer att optimeras för att utföra en koppling endast till raderna av big filtreras av foo='bar' skick, inte på hela big , av valfri frågeoptimerare som är värd sitt salt, trots att WHERE satsen visas textmässigt efter JOIN .

Du kanske vill skriva om detta utan en inre SELECT så här:

SELECT t1.a as big_a, t1.b as big_b, t2.b as small_b, t2.c, t2.d
FROM big t1
LEFT JOIN small t2 ON t1.b = t2.b
WHERE t1.foo='bar'


  1. Hur man implementerar flerdimensionella sekvenser

  2. MySQL långsamma frågelogg loggar snabba frågor

  3. SQLAlchemy WHERE IN enstaka värde (rå SQL)

  4. Varför anser PostgreSQL serialiserbar transaktion att detta är en konflikt?