sql >> Databáze >  >> RDS >> Mysql

Rychlejší levé JOIN nebo rychlejší vnitřní spojení?

Záleží; spusťte je oba, abyste to zjistili; pak spusťte 'vysvětlení vybrat' pro vysvětlení.

Skutečný rozdíl ve výkonu se může pohybovat od „prakticky neexistující“ po „docela významný“ v závislosti na tom, kolik řádků v A s id='12345' nemá žádné odpovídající záznamy v B a C.

Aktualizovat (na základě zaslaných plánů dotazů)

Když použijete INNER JOIN, nezáleží na tom (výsledky, ne výkon), se kterou tabulkou začít, takže se optimalizátor pokusí vybrat tu, o které si myslí, že by fungovala nejlépe. Zdá se, že máte indexy ve všech příslušných sloupcích PK / FK a buď nemáte index na friend_events.userid nebo existuje příliš mnoho záznamů s userid = '13006' a nepoužívá se; v obou případech optimalizátor vybere tabulku s méně řádky jako „základ“ – v tomto případě je to zcms_users .

Když použijete LEFT JOIN, dělá záleží (výsledky), kterou tabulkou začít; tedy friend_events je vybráno. A teď proč tímto způsobem to zabere méně času, nejsem si jistý; Hádám friend_events.userid stav pomáhá. Pokud byste k tomu přidali index (je to opravdu varchar, mimo jiné? ne číselný?), vaše INNER JOIN by se také mohlo chovat jinak (a být rychlejší).



  1. uWSGI, Flask, sqlalchemy a postgres:Chyba SSL:dešifrování se nezdařilo nebo špatný záznam mac

  2. Naplnění databáze bez příkazu load data

  3. MySQL Vyberte nejnovější řádek specifické hodnoty

  4. Existuje způsob, jak načíst textová data do databáze v PostgreSQL?