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

Vytvořte jedinečný index pro nejedinečný sloupec

Index může indexovat pouze skutečné řádky, nikoli agregované řádky. Takže ano, pokud jde o požadovaný index, jedinou možností je vytvoření tabulky s jedinečnými hodnotami, jak jste zmínil. Vynutit referenční integritu pomocí omezení cizího klíče z data.day na days.day . Toto může také nejlepší pro výkon v závislosti na celkové situaci.

Protože se však jedná o výkon , existuje alternativní řešení:můžete použít rekurzivní CTE k emulaci volného skenování indexu:

WITH RECURSIVE cte AS (
   (  -- parentheses required
   SELECT day FROM data ORDER BY 1 LIMIT 1
   )
   UNION ALL
   SELECT (SELECT day FROM data WHERE day > c.day ORDER BY 1 LIMIT 1)
   FROM   cte  c
   WHERE  c.day IS NOT NULL  -- exit condition
   )
SELECT day FROM cte;

Závorky kolem prvního SELECT jsou vyžadovány z důvodu připojeného ORDER BY a LIMIT doložky. Viz:

To vyžaduje pouze prostý index v day .

Existují různé varianty v závislosti na vašich skutečných dotazech:

Více v mé odpovědi na váš doplňující dotaz:




  1. Zábava s kompresí (columnstore) na velmi velkém stole – část 3

  2. SQL TABULKA

  3. Python:Co je špatného na mém kódu s více procesy vkládáním do MySQL?

  4. Spouštěč MySql pro aktualizaci PostCount