sql >> Databáze >  >> RDS >> PostgreSQL

Levé spojení Laterální a maticové agregáty

Jak již poznamenal @Denis:není potřeba LATERAL .Váš poddotaz také vybral nesprávný sloupec. Funguje to:

SELECT t1.t1_id, t1.t1_data, t2_ids
FROM   t1
LEFT   JOIN (
    SELECT t1_id, array_agg(t2_id) AS t2_ids
    FROM   t1_t2_rel
    GROUP  BY 1
    ) sub USING (t1_id);

-SQL housle.

Výkon a testování

Ohledně následného sekvenčního skenování, které zmiňujete:Pokud se dotazujete na celou tabulku, sekvenční skenování je často rychlejší . Záleží na verzi, kterou používáte, vašem hardwaru, vašem nastavení a statistikách mohutností a distribuce vašich dat. Experimentujte se selektivním WHERE klauzule jako WHERE t1.t1_id < 1000 nebo WHERE t1.t1_id = 1000 a kombinovat s nastavením plánovače se dozvíte o možnostech:

SET enable_seqscan = off;
SET enable_indexscan = off;

Postup resetování:

RESET enable_seqscan;
RESET enable_indexscan;

Pouze ve vaší místní relaci, pozor! Tato související odpověď na dba.SE obsahuje další pokyny.
Vaše nastavení může být samozřejmě také vypnuto:




  1. Zkrácení tabulky v Oracle získává chyby

  2. Jako operátor v Entity Framework?

  3. Jak převést datum a čas v perštině na SQL Server

  4. Přehled nových funkcí analytického okna v MySQL 8.0