sql >> Databasteknik >  >> RDS >> Mysql

Vänster JOIN snabbare eller Inner Join snabbare?

Det beror på; kör dem båda för att ta reda på det; kör sedan ett "explain select" för en förklaring.

Den faktiska prestandaskillnaden kan variera från "nästan obefintlig" till "ganska betydande" beroende på hur många rader i A med id='12345' som inte har några matchande poster i B och C.

Uppdatera (baserat på publicerade frågeplaner)

När du använder INNER JOIN spelar det ingen roll (resultatmässigt, inte prestandamässigt) vilken tabell du ska börja med, så optimeraren försöker välja den som den tror skulle fungera bäst. Det verkar som att du har index på alla lämpliga PK/FK-kolumner och du har antingen inget index på friend_events.userid eller så finns det för många poster med userid = '13006' och det används inte; antingen sätt optimizer väljer tabellen med färre rader som "bas" - i det här fallet är det zcms_users .

När du använder LEFT JOIN gör det det spelar roll (resultatmässigt) vilken tabell man ska börja med; alltså friend_events är plockad. Nu varför det tar mindre tid på det sättet är jag inte helt säker på; Jag antar att friend_events.userid tillstånd hjälper. Om du skulle lägga till ett index (är det verkligen varchar, btw? inte numeriskt?) på det, kan din INNER JOIN bete sig annorlunda (och bli snabbare) också.



  1. Skapar sammansatt primärnyckel i SQL Server

  2. Hur Stuff och "For XML Path" fungerar i SQL Server?

  3. SQL-ändringstabell

  4. Vad är skillnaden mellan att använda och på i tabellanslutningar i MySQL?